[gnome-packagekit/glib2: 8/79] moo
- From: Richard Hughes <rhughes src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gnome-packagekit/glib2: 8/79] moo
- Date: Tue, 6 Oct 2009 09:45:39 +0000 (UTC)
commit 0fa076427169c924fa7d8632771b21751ec95e89
Author: Richard Hughes <richard hughsie com>
Date: Thu Sep 10 10:46:32 2009 +0100
moo
src/Makefile.am | 13 ++-
src/gpk-application.c | 263 ++++++++++++++-----------
src/gpk-backend-status.c | 23 ++-
src/gpk-dbus-task.c | 2 +-
src/gpk-error.c | 3 +-
src/gpk-log.c | 5 +-
src/gpk-prefs.c | 93 +++++++--
src/gpk-repo.c | 474 ++++++++++++++++++++++++----------------------
src/gpk-service-pack.c | 8 -
src/gpk-update-viewer.c | 45 ++++-
10 files changed, 536 insertions(+), 393 deletions(-)
---
diff --git a/src/Makefile.am b/src/Makefile.am
index 4a3c535..b3dc149 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -241,10 +241,21 @@ gpk_update_viewer_LDADD = \
gpk_repo_SOURCES = \
gpk-repo.c \
+ egg-debug.c \
+ egg-debug.h \
+ gpk-enum.h \
+ gpk-enum.c \
+ gpk-common.h \
+ gpk-common.c \
+ gpk-gnome.h \
+ gpk-gnome.c \
+ gpk-error.h \
+ gpk-error.c \
+ gpk-animated-icon.c \
+ gpk-animated-icon.h \
$(NULL)
gpk_repo_LDADD = \
- libgpkshared.a \
$(shared_LIBS) \
$(NULL)
diff --git a/src/gpk-application.c b/src/gpk-application.c
index 5539d0e..5c8acd8 100644
--- a/src/gpk-application.c
+++ b/src/gpk-application.c
@@ -3520,6 +3520,150 @@ out:
}
/**
+ * pk_backend_status_get_properties_cb:
+ **/
+static void
+pk_backend_status_get_properties_cb (GObject *object, GAsyncResult *res, GMainLoop *loop)
+{
+ GtkWidget *widget;
+ GError *error = NULL;
+ PkControl *control = PK_CONTROL(object);
+ gboolean ret;
+ PkBitfield filters;
+ PkBitfield roles;
+
+ /* get the result */
+ ret = pk_control_get_properties_finish (control, res, &error);
+ if (!ret) {
+ /* TRANSLATORS: daemon is broken */
+ g_print ("%s: %s\n", _("Exiting as properties could not be retrieved"), error->message);
+ g_error_free (error);
+ g_main_loop_quit (loop);
+ goto out;
+ }
+
+ /* get values */
+ g_object_get (control,
+ "roles", &application->priv->roles,
+ "filters", &application->priv->filters,
+ "groups", &application->priv->groups,
+ NULL);
+
+ /* Remove description/file list if needed. */
+ if (pk_bitfield_contain (application->priv->roles, PK_ROLE_ENUM_GET_DETAILS) == FALSE) {
+ widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "scrolledwindow2"));
+ gtk_widget_hide (widget);
+ }
+ if (pk_bitfield_contain (application->priv->roles, PK_ROLE_ENUM_GET_FILES) == FALSE) {
+ widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_files"));
+ gtk_widget_hide (widget);
+ }
+ if (pk_bitfield_contain (application->priv->roles, PK_ROLE_ENUM_GET_DEPENDS) == FALSE) {
+ widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_depends"));
+ gtk_widget_hide (widget);
+ }
+ if (pk_bitfield_contain (application->priv->roles, PK_ROLE_ENUM_GET_REQUIRES) == FALSE) {
+ widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_requires"));
+ gtk_widget_hide (widget);
+ }
+
+ /* hide the group selector if we don't support search-groups */
+ if (pk_bitfield_contain (application->priv->roles, PK_ROLE_ENUM_SEARCH_GROUP) == FALSE) {
+ widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "scrolledwindow_groups"));
+ gtk_widget_hide (widget);
+ }
+
+ /* hide the refresh cache button if we can't do it */
+ if (pk_bitfield_contain (application->priv->roles, PK_ROLE_ENUM_REFRESH_CACHE) == FALSE) {
+ widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_refresh"));
+ gtk_widget_hide (widget);
+ }
+
+ /* hide the software-sources button if we can't do it */
+ if (pk_bitfield_contain (application->priv->roles, PK_ROLE_ENUM_GET_REPO_LIST) == FALSE) {
+ widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_sources"));
+ gtk_widget_hide (widget);
+ }
+
+
+ /* hide the filters we can't support */
+ if (pk_bitfield_contain (application->priv->filters, PK_FILTER_ENUM_INSTALLED) == FALSE) {
+ widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_installed"));
+ gtk_widget_hide (widget);
+ }
+ if (pk_bitfield_contain (application->priv->filters, PK_FILTER_ENUM_DEVELOPMENT) == FALSE) {
+ widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_devel"));
+ gtk_widget_hide (widget);
+ }
+ if (pk_bitfield_contain (application->priv->filters, PK_FILTER_ENUM_GUI) == FALSE) {
+ widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_gui"));
+ gtk_widget_hide (widget);
+ }
+ if (pk_bitfield_contain (application->priv->filters, PK_FILTER_ENUM_FREE) == FALSE) {
+ widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_free"));
+ gtk_widget_hide (widget);
+ }
+ if (pk_bitfield_contain (application->priv->filters, PK_FILTER_ENUM_ARCH) == FALSE) {
+ widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_arch"));
+ gtk_widget_hide (widget);
+ }
+ if (pk_bitfield_contain (application->priv->filters, PK_FILTER_ENUM_SOURCE) == FALSE) {
+ widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_source"));
+ gtk_widget_hide (widget);
+ }
+
+ /* BASENAME, use by default, or hide */
+ widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_basename"));
+ if (pk_bitfield_contain (application->priv->filters, PK_FILTER_ENUM_BASENAME)) {
+ enabled = gconf_client_get_bool (application->priv->gconf_client,
+ GPK_CONF_APPLICATION_FILTER_BASENAME, NULL);
+ gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (widget), enabled);
+ /* work round a gtk2+ bug: toggled should be fired when doing gtk_check_menu_item_set_active */
+ gpk_application_menu_filter_basename_cb (widget, application);
+ } else {
+ gtk_widget_hide (widget);
+ }
+
+ /* NEWEST, use by default, or hide */
+ widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_newest"));
+ if (pk_bitfield_contain (application->priv->filters, PK_FILTER_ENUM_NEWEST)) {
+ /* set from remembered state */
+ enabled = gconf_client_get_bool (application->priv->gconf_client,
+ GPK_CONF_APPLICATION_FILTER_NEWEST, NULL);
+ gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (widget), enabled);
+ /* work round a gtk2+ bug: toggled should be fired when doing gtk_check_menu_item_set_active */
+ gpk_application_menu_filter_newest_cb (widget, application);
+ } else {
+ gtk_widget_hide (widget);
+ }
+
+ /* ARCH, use by default, or hide */
+ widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_arch"));
+ if (pk_bitfield_contain (application->priv->filters, PK_FILTER_ENUM_ARCH)) {
+ /* set from remembered state */
+ enabled = gconf_client_get_bool (application->priv->gconf_client,
+ GPK_CONF_APPLICATION_FILTER_ARCH, NULL);
+ gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (widget), enabled);
+ /* work round a gtk2+ bug: toggled should be fired when doing gtk_check_menu_item_set_active */
+ gpk_application_menu_filter_arch_cb (widget, application);
+ } else {
+ gtk_widget_hide (widget);
+ }
+
+ /* simple list or category tree? */
+ ret = gconf_client_get_bool (application->priv->gconf_client, GPK_CONF_APPLICATION_CATEGORY_GROUPS, NULL);
+ if (ret)
+ ret = gpk_application_create_group_list_categories (application);
+
+ /* fallback to creating a simple list if we can't do category list */
+ if (!ret)
+ gpk_application_create_group_list_enum (application);
+out:
+ return;
+}
+}
+
+/**
* gpk_application_init:
**/
static void
@@ -3631,13 +3775,9 @@ gpk_application_init (GpkApplication *application)
g_signal_connect (application->priv->client_secondary, "finished",
G_CALLBACK (gpk_application_finished_cb), application);
- /* get bitfield */
- application->priv->roles = pk_control_get_actions (application->priv->control, NULL);
- application->priv->filters = pk_control_get_filters (application->priv->control, NULL);
- application->priv->groups = pk_control_get_groups (application->priv->control, NULL);
-
- application->priv->pconnection = pk_connection_new ();
- g_signal_connect (application->priv->pconnection, "connection-changed",
+ /* get properties */
+ pk_control_get_properties_async (application->priv->control, NULL, (GAsyncReadyCallback) pk_backend_status_get_properties_cb, loop);
+ g_signal_connect (application->priv->control, "connection-changed",
G_CALLBACK (gpk_application_connection_changed_cb), application);
/* get localised data from sqlite database */
@@ -3856,42 +3996,6 @@ gpk_application_init (GpkApplication *application)
g_signal_connect (widget, "toggled",
G_CALLBACK (gpk_application_menu_filter_arch_cb), application);
- /* Remove description/file list if needed. */
- if (pk_bitfield_contain (application->priv->roles, PK_ROLE_ENUM_GET_DETAILS) == FALSE) {
- widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "scrolledwindow2"));
- gtk_widget_hide (widget);
- }
- if (pk_bitfield_contain (application->priv->roles, PK_ROLE_ENUM_GET_FILES) == FALSE) {
- widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_files"));
- gtk_widget_hide (widget);
- }
- if (pk_bitfield_contain (application->priv->roles, PK_ROLE_ENUM_GET_DEPENDS) == FALSE) {
- widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_depends"));
- gtk_widget_hide (widget);
- }
- if (pk_bitfield_contain (application->priv->roles, PK_ROLE_ENUM_GET_REQUIRES) == FALSE) {
- widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_requires"));
- gtk_widget_hide (widget);
- }
-
- /* hide the group selector if we don't support search-groups */
- if (pk_bitfield_contain (application->priv->roles, PK_ROLE_ENUM_SEARCH_GROUP) == FALSE) {
- widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "scrolledwindow_groups"));
- gtk_widget_hide (widget);
- }
-
- /* hide the refresh cache button if we can't do it */
- if (pk_bitfield_contain (application->priv->roles, PK_ROLE_ENUM_REFRESH_CACHE) == FALSE) {
- widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_refresh"));
- gtk_widget_hide (widget);
- }
-
- /* hide the software-sources button if we can't do it */
- if (pk_bitfield_contain (application->priv->roles, PK_ROLE_ENUM_GET_REPO_LIST) == FALSE) {
- widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_sources"));
- gtk_widget_hide (widget);
- }
-
/* simple find button */
widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "button_find"));
g_signal_connect (widget, "clicked",
@@ -3930,70 +4034,6 @@ gpk_application_init (GpkApplication *application)
g_signal_connect (widget, "icon-press",
G_CALLBACK (gpk_application_entry_text_icon_press_cb), application);
- /* hide the filters we can't support */
- if (pk_bitfield_contain (application->priv->filters, PK_FILTER_ENUM_INSTALLED) == FALSE) {
- widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_installed"));
- gtk_widget_hide (widget);
- }
- if (pk_bitfield_contain (application->priv->filters, PK_FILTER_ENUM_DEVELOPMENT) == FALSE) {
- widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_devel"));
- gtk_widget_hide (widget);
- }
- if (pk_bitfield_contain (application->priv->filters, PK_FILTER_ENUM_GUI) == FALSE) {
- widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_gui"));
- gtk_widget_hide (widget);
- }
- if (pk_bitfield_contain (application->priv->filters, PK_FILTER_ENUM_FREE) == FALSE) {
- widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_free"));
- gtk_widget_hide (widget);
- }
- if (pk_bitfield_contain (application->priv->filters, PK_FILTER_ENUM_ARCH) == FALSE) {
- widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_arch"));
- gtk_widget_hide (widget);
- }
- if (pk_bitfield_contain (application->priv->filters, PK_FILTER_ENUM_SOURCE) == FALSE) {
- widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_source"));
- gtk_widget_hide (widget);
- }
-
- /* BASENAME, use by default, or hide */
- widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_basename"));
- if (pk_bitfield_contain (application->priv->filters, PK_FILTER_ENUM_BASENAME)) {
- enabled = gconf_client_get_bool (application->priv->gconf_client,
- GPK_CONF_APPLICATION_FILTER_BASENAME, NULL);
- gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (widget), enabled);
- /* work round a gtk2+ bug: toggled should be fired when doing gtk_check_menu_item_set_active */
- gpk_application_menu_filter_basename_cb (widget, application);
- } else {
- gtk_widget_hide (widget);
- }
-
- /* NEWEST, use by default, or hide */
- widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_newest"));
- if (pk_bitfield_contain (application->priv->filters, PK_FILTER_ENUM_NEWEST)) {
- /* set from remembered state */
- enabled = gconf_client_get_bool (application->priv->gconf_client,
- GPK_CONF_APPLICATION_FILTER_NEWEST, NULL);
- gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (widget), enabled);
- /* work round a gtk2+ bug: toggled should be fired when doing gtk_check_menu_item_set_active */
- gpk_application_menu_filter_newest_cb (widget, application);
- } else {
- gtk_widget_hide (widget);
- }
-
- /* ARCH, use by default, or hide */
- widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "menuitem_arch"));
- if (pk_bitfield_contain (application->priv->filters, PK_FILTER_ENUM_ARCH)) {
- /* set from remembered state */
- enabled = gconf_client_get_bool (application->priv->gconf_client,
- GPK_CONF_APPLICATION_FILTER_ARCH, NULL);
- gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (widget), enabled);
- /* work round a gtk2+ bug: toggled should be fired when doing gtk_check_menu_item_set_active */
- gpk_application_menu_filter_arch_cb (widget, application);
- } else {
- gtk_widget_hide (widget);
- }
-
widget = GTK_WIDGET (gtk_builder_get_object (application->priv->builder, "entry_text"));
g_signal_connect (widget, "key-press-event",
G_CALLBACK (gpk_application_text_changed_cb), application);
@@ -4060,15 +4100,6 @@ gpk_application_init (GpkApplication *application)
g_signal_connect (selection, "changed",
G_CALLBACK (gpk_application_groups_treeview_changed_cb), application);
- /* simple list or category tree? */
- ret = gconf_client_get_bool (application->priv->gconf_client, GPK_CONF_APPLICATION_CATEGORY_GROUPS, NULL);
- if (ret)
- ret = gpk_application_create_group_list_categories (application);
-
- /* fallback to creating a simple list if we can't do category list */
- if (!ret)
- gpk_application_create_group_list_enum (application);
-
/* get repos, so we can show the full name in the software source box */
ret = pk_client_get_repo_list (application->priv->client_primary, PK_FILTER_ENUM_NONE, &error);
if (!ret) {
diff --git a/src/gpk-backend-status.c b/src/gpk-backend-status.c
index 60863c1..d72c997 100644
--- a/src/gpk-backend-status.c
+++ b/src/gpk-backend-status.c
@@ -34,10 +34,10 @@
static GtkBuilder *builder = NULL;
/**
- * pk_updates_close_cb:
+ * gpk_backend_status_close_cb:
**/
static void
-pk_updates_close_cb (GtkWidget *widget, gpointer data)
+gpk_backend_status_close_cb (GtkWidget *widget, gpointer data)
{
GMainLoop *loop = (GMainLoop *) data;
egg_debug ("emitting action-close");
@@ -45,18 +45,20 @@ pk_updates_close_cb (GtkWidget *widget, gpointer data)
}
/**
- * pk_updates_delete_event_cb:
- * @event: The event type, unused.
+ * gpk_backend_status_delete_event_cb:
**/
static gboolean
-pk_updates_delete_event_cb (GtkWidget *widget, GdkEvent *event, gpointer data)
+gpk_backend_status_delete_event_cb (GtkWidget *widget, GdkEvent *event, gpointer data)
{
- pk_updates_close_cb (widget, data);
+ gpk_backend_status_close_cb (widget, data);
return FALSE;
}
+/**
+ * gpk_backend_status_get_properties_cb:
+ **/
static void
-pk_control_test_get_properties_cb (GObject *object, GAsyncResult *res, GMainLoop *loop)
+gpk_backend_status_get_properties_cb (GObject *object, GAsyncResult *res, GMainLoop *loop)
{
GtkWidget *widget;
GError *error = NULL;
@@ -219,7 +221,6 @@ pk_control_test_get_properties_cb (GObject *object, GAsyncResult *res, GMainLoop
out:
g_free (name);
g_free (author);
- return;
}
/**
@@ -286,15 +287,15 @@ main (int argc, char *argv[])
widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_close"));
g_signal_connect (widget, "clicked",
- G_CALLBACK (pk_updates_close_cb), loop);
+ G_CALLBACK (gpk_backend_status_close_cb), loop);
widget = GTK_WIDGET (gtk_builder_get_object (builder, "dialog_backend"));
g_signal_connect (widget, "delete_event",
- G_CALLBACK (pk_updates_delete_event_cb), loop);
+ G_CALLBACK (gpk_backend_status_delete_event_cb), loop);
gtk_widget_show (GTK_WIDGET (widget));
/* get properties */
- pk_control_get_properties_async (control, NULL, (GAsyncReadyCallback) pk_control_test_get_properties_cb, loop);
+ pk_control_get_properties_async (control, NULL, (GAsyncReadyCallback) gpk_backend_status_get_properties_cb, loop);
/* wait for results */
g_main_loop_run (loop);
diff --git a/src/gpk-dbus-task.c b/src/gpk-dbus-task.c
index f854f4d..373e28d 100644
--- a/src/gpk-dbus-task.c
+++ b/src/gpk-dbus-task.c
@@ -3311,7 +3311,7 @@ gpk_dbus_task_init (GpkDbusTask *task)
/* get actions */
task->priv->control = pk_control_new ();
- task->priv->roles = pk_control_get_actions (task->priv->control, NULL);
+ task->priv->roles = pk_control_get_properties_sync (task->priv->control, NULL);
task->priv->client_primary = pk_client_new ();
g_signal_connect (task->priv->client_primary, "finished",
diff --git a/src/gpk-error.c b/src/gpk-error.c
index 9556770..79b9b47 100644
--- a/src/gpk-error.c
+++ b/src/gpk-error.c
@@ -29,7 +29,6 @@
#include <packagekit-glib2/packagekit.h>
#include "egg-debug.h"
-#include "egg-string.h"
#include "gpk-common.h"
#include "gpk-error.h"
@@ -115,7 +114,7 @@ gpk_error_dialog_modal_with_time (GtkWindow *window, const gchar *title, const g
gtk_label_set_markup (GTK_LABEL (widget), message);
/* show text in the expander */
- if (egg_strzero (details)) {
+ if (details == NULL || details[0] == '\0') {
widget = GTK_WIDGET (gtk_builder_get_object (builder, "expander_details"));
gtk_widget_hide (widget);
} else {
diff --git a/src/gpk-log.c b/src/gpk-log.c
index 4bc2df8..bcc3745 100644
--- a/src/gpk-log.c
+++ b/src/gpk-log.c
@@ -575,8 +575,10 @@ gpk_log_get_old_transactions_cb (GObject *object, GAsyncResult *res, gpointer us
/* get results */
exit_enum = pk_results_get_exit_code (results);
- if (exit_enum != PK_EXIT_ENUM_SUCCESS)
+ if (exit_enum != PK_EXIT_ENUM_SUCCESS) {
egg_warning ("failed to get old transactions: %s", pk_exit_enum_to_text (exit_enum));
+ goto out;
+ }
/* get the list */
if (transactions != NULL)
@@ -588,7 +590,6 @@ out:
g_object_unref (results);
}
-
/**
* gpk_log_refresh
**/
diff --git a/src/gpk-prefs.c b/src/gpk-prefs.c
index 6ecf839..cddf8ea 100644
--- a/src/gpk-prefs.c
+++ b/src/gpk-prefs.c
@@ -377,6 +377,72 @@ gpk_prefs_network_status_changed_cb (PkControl *control, PkNetworkEnum state, gp
}
/**
+ * pk_prefs_get_properties_cb:
+ **/
+static void
+pk_prefs_get_properties_cb (GObject *object, GAsyncResult *res, GMainLoop *loop)
+{
+ GtkWidget *widget;
+ GError *error = NULL;
+ PkControl *control = PK_CONTROL(object);
+ gboolean ret;
+ PkBitfield roles;
+
+ /* get the result */
+ ret = pk_control_get_properties_finish (control, res, &error);
+ if (!ret) {
+ /* TRANSLATORS: backend is broken, and won't tell us what it supports */
+ g_print ("%s: %s\n", _("Exiting as backend details could not be retrieved"), error->message);
+ g_error_free (error);
+ g_main_loop_quit (loop);
+ goto out;
+ }
+
+ /* get values */
+ g_object_get (control,
+ "roles", &roles,
+ NULL);
+
+ /* hide if not supported */
+ if (!pk_bitfield_contain (roles, PK_ROLE_ENUM_GET_DISTRO_UPGRADES)) {
+ widget = GTK_WIDGET (gtk_builder_get_object (builder, "label_upgrade"));
+ gtk_widget_hide (widget);
+ widget = GTK_WIDGET (gtk_builder_get_object (builder, "combobox_upgrade"));
+ gtk_widget_hide (widget);
+ }
+out:
+ return;
+}
+
+/**
+ * pk_prefs_get_network_state_cb:
+ **/
+static void
+pk_prefs_get_network_state_cb (GObject *object, GAsyncResult *res, GMainLoop *loop)
+{
+ GtkWidget *widget;
+ GError *error = NULL;
+ PkControl *control = PK_CONTROL(object);
+ PkNetworkEnum state;
+
+ /* get the result */
+ state = pk_control_get_network_state_finish (control, res, &error);
+ if (state == PK_NETWORK_ENUM_UNKNOWN) {
+ egg_warning ("network status unknown: %s", error->message);
+ g_error_free (error);
+ goto out;
+ }
+
+ /* only show label on mobile broadband */
+ if (state == PK_NETWORK_ENUM_MOBILE) {
+ widget = GTK_WIDGET (gtk_builder_get_object (builder, "hbox_mobile_broadband"));
+ gtk_widget_show (widget);
+ }
+out:
+ return;
+}
+
+/**
* main:
**/
int
@@ -387,13 +453,12 @@ main (int argc, char *argv[])
GOptionContext *context;
GtkWidget *main_window;
GtkWidget *widget;
- PkBitfield roles;
PkControl *control;
UniqueApp *unique_app;
- PkNetworkEnum state;
guint retval;
guint xid = 0;
GError *error = NULL;
+ GMainLoop *loop;
const GOptionEntry options[] = {
{ "verbose", 'v', 0, G_OPTION_ARG_NONE, &verbose,
@@ -443,11 +508,10 @@ main (int argc, char *argv[])
G_CALLBACK (gpk_prefs_message_received_cb), NULL);
/* get actions */
+ loop = g_main_loop_new (NULL, FALSE);
control = pk_control_new ();
g_signal_connect (control, "network-state-changed",
G_CALLBACK (gpk_prefs_network_status_changed_cb), NULL);
- roles = pk_control_get_actions (control, NULL);
- state = pk_control_get_network_state (control, NULL);
/* get UI */
builder = gtk_builder_new ();
@@ -476,25 +540,11 @@ main (int argc, char *argv[])
g_signal_connect (widget, "clicked",
G_CALLBACK (pk_button_help_cb), NULL);
- /* only show label on mobile broadband */
- if (state == PK_NETWORK_ENUM_MOBILE) {
- widget = GTK_WIDGET (gtk_builder_get_object (builder, "hbox_mobile_broadband"));
- gtk_widget_show (widget);
- }
-
/* update the combo boxes */
gpk_prefs_update_freq_combo_setup ();
gpk_prefs_upgrade_freq_combo_setup ();
gpk_prefs_auto_update_combo_setup ();
- /* hide if not supported */
- if (!pk_bitfield_contain (roles, PK_ROLE_ENUM_GET_DISTRO_UPGRADES)) {
- widget = GTK_WIDGET (gtk_builder_get_object (builder, "label_upgrade"));
- gtk_widget_hide (widget);
- widget = GTK_WIDGET (gtk_builder_get_object (builder, "combobox_upgrade"));
- gtk_widget_hide (widget);
- }
-
gtk_widget_show (main_window);
/* set the parent window if it is specified */
@@ -503,10 +553,15 @@ main (int argc, char *argv[])
gpk_window_set_parent_xid (GTK_WINDOW (main_window), xid);
}
+ /* get some data */
+ pk_control_get_properties_async (control, NULL, (GAsyncReadyCallback) pk_prefs_get_properties_cb, loop);
+ pk_control_get_network_state_async (control, NULL, (GAsyncReadyCallback) pk_prefs_get_network_state_cb, loop);
+
/* wait */
- gtk_main ();
+ g_main_loop_run (loop);
out_build:
+ g_main_loop_unref (loop);
g_object_unref (control);
g_object_unref (builder);
unique_out:
diff --git a/src/gpk-repo.c b/src/gpk-repo.c
index 4fa8c85..d04a7b6 100644
--- a/src/gpk-repo.c
+++ b/src/gpk-repo.c
@@ -21,20 +21,19 @@
#include "config.h"
-#include <glib.h>
#include <glib/gi18n.h>
#include <locale.h>
#include <gtk/gtk.h>
-#include <math.h>
-#include <string.h>
-#include <dbus/dbus-glib.h>
+//#include <math.h>
+//#include <string.h>
+//#include <dbus/dbus-glib.h>
#include <gconf/gconf-client.h>
#include <packagekit-glib2/packagekit.h>
#include <unique/unique.h>
#include "egg-debug.h"
-#include "egg-string.h"
+//#include "egg-string.h"
#include "gpk-gnome.h"
#include "gpk-common.h"
@@ -44,20 +43,12 @@
static GtkBuilder *builder = NULL;
static GtkListStore *list_store = NULL;
-static PkClient *client_query = NULL;
-#if PK_CHECK_VERSION(0,5,1)
-static PkClientPool *pool = NULL;
-#else
-static GPtrArray *client_array = NULL;
-#endif
+static PkClient *client = NULL;
static PkBitfield roles;
static GConfClient *gconf_client;
static gboolean show_details;
static GtkTreePath *path_global = NULL;
static GtkWidget *image_animation = NULL;
-#if !PK_CHECK_VERSION(0,5,1)
-static PkStatusEnum status_last = PK_STATUS_ENUM_UNKNOWN;
-#endif
static guint status_id = 0;
enum {
@@ -69,10 +60,6 @@ enum {
REPO_COLUMN_LAST
};
-#if !PK_CHECK_VERSION(0,5,1)
-static PkClient *gpk_repo_create_client (void);
-#endif
-
/**
* gpk_repo_find_iter_model_cb:
**/
@@ -164,6 +151,106 @@ gpk_button_help_cb (GtkWidget *widget, gboolean data)
gpk_gnome_help ("software-sources");
}
+/**
+ * gpk_repo_status_changed_timeout_cb:
+ **/
+static gboolean
+gpk_repo_status_changed_timeout_cb (PkProgress *progress)
+{
+ const gchar *text;
+ GtkWidget *widget;
+ PkStatusEnum status;
+
+ /* get the last status */
+ g_object_get (progress,
+ "status", &status,
+ NULL);
+
+ /* set the text and show */
+ widget = GTK_WIDGET (gtk_builder_get_object (builder, "viewport_animation_preview"));
+ gtk_widget_show (widget);
+ widget = GTK_WIDGET (gtk_builder_get_object (builder, "label_animation"));
+ text = gpk_status_enum_to_localised_text (status);
+ gtk_label_set_label (GTK_LABEL (widget), text);
+
+ /* set icon */
+ gpk_set_animated_icon_from_status (GPK_ANIMATED_ICON (image_animation), status, GTK_ICON_SIZE_LARGE_TOOLBAR);
+
+ /* never repeat */
+ status_id = 0;
+ return FALSE;
+}
+
+/**
+ * gpk_repo_progress_cb:
+ **/
+static void
+gpk_repo_progress_cb (PkProgress *progress, PkProgressType type, gpointer user_data)
+{
+ PkStatusEnum status;
+ GtkWidget *widget;
+
+ if (type != PK_PROGRESS_TYPE_STATUS)
+ return;
+
+ /* get value */
+ g_object_get (progress,
+ "status", &status,
+ NULL);
+ egg_debug ("now %s", pk_status_enum_to_text (status));
+
+ if (status == PK_STATUS_ENUM_FINISHED) {
+ /* we've not yet shown, so don't bother */
+ if (status_id > 0) {
+ g_source_remove (status_id);
+ status_id = 0;
+ }
+ widget = GTK_WIDGET (gtk_builder_get_object (builder, "viewport_animation_preview"));
+ gtk_widget_hide (widget);
+ gpk_animated_icon_enable_animation (GPK_ANIMATED_ICON (image_animation), FALSE);
+ goto out;
+ }
+
+ /* already pending show */
+ if (status_id > 0)
+ goto out;
+
+ /* only show after some time in the transaction */
+ status_id = g_timeout_add (GPK_UI_STATUS_SHOW_DELAY, (GSourceFunc) gpk_repo_status_changed_timeout_cb, progress);
+out:
+ return;
+}
+
+/**
+ * gpk_repo_repo_enable_cb
+ **/
+static void
+gpk_repo_repo_enable_cb (GObject *object, GAsyncResult *res, gpointer user_data)
+{
+// PkClient *client = PK_CLIENT (object);
+ GError *error = NULL;
+ PkResults *results = NULL;
+ PkExitEnum exit_enum;
+
+ /* get the results */
+ results = pk_client_generic_finish (client, res, &error);
+ if (results == NULL) {
+ egg_warning ("failed to get set repo: %s", error->message);
+ g_error_free (error);
+ goto out;
+ }
+
+ /* get results */
+ exit_enum = pk_results_get_exit_code (results);
+ if (exit_enum != PK_EXIT_ENUM_SUCCESS) {
+ egg_warning ("failed to set repo: %s", pk_exit_enum_to_text (exit_enum));
+ goto out;
+ }
+out:
+ if (results != NULL)
+ g_object_unref (results);
+}
+
static void
gpk_misc_enabled_toggled (GtkCellRendererToggle *cell, gchar *path_str, gpointer data)
{
@@ -171,15 +258,12 @@ gpk_misc_enabled_toggled (GtkCellRendererToggle *cell, gchar *path_str, gpointer
GtkTreeIter iter;
GtkTreePath *path = gtk_tree_path_new_from_string (path_str);
gboolean enabled;
- gchar *repo_id;
- gboolean ret;
- GError *error = NULL;
- PkClient *client;
+ gchar *repo_id = NULL;
/* do we have the capability? */
if (pk_bitfield_contain (roles, PK_ROLE_ENUM_REPO_ENABLE) == FALSE) {
egg_debug ("can't change state");
- return;
+ goto out;
}
/* get toggled iter */
@@ -191,26 +275,17 @@ gpk_misc_enabled_toggled (GtkCellRendererToggle *cell, gchar *path_str, gpointer
/* do something with the value */
enabled ^= 1;
- /* do this to the repo */
- egg_debug ("setting %s to %i", repo_id, enabled);
-#if PK_CHECK_VERSION(0,5,1)
- client = pk_client_pool_create (pool);
-#else
- client = gpk_repo_create_client ();
-#endif
- ret = pk_client_repo_enable (client, repo_id, enabled, &error);
- if (!ret) {
- egg_warning ("could not set repo enabled state: %s", error->message);
- g_error_free (error);
- goto out;
- }
- g_object_unref (client);
-
/* set new value */
gtk_list_store_set (GTK_LIST_STORE (model), &iter,
REPO_COLUMN_SENSITIVE, FALSE,
-1);
+ /* set the repo */
+ egg_debug ("setting %s to %i", repo_id, enabled);
+ pk_client_repo_enable_async (client, repo_id, enabled, NULL,
+ gpk_repo_progress_cb, NULL,
+ gpk_repo_repo_enable_cb, NULL);
+
out:
/* clean up */
g_free (repo_id);
@@ -218,32 +293,6 @@ out:
}
/**
- * gpk_repo_detail_cb:
- **/
-static void
-gpk_repo_detail_cb (PkClient *client, const gchar *repo_id,
- const gchar *description, gboolean enabled, gpointer data)
-{
- GtkTreeIter iter;
- GtkTreeView *treeview = GTK_TREE_VIEW (gtk_builder_get_object (builder, "treeview_repo"));
- GtkTreeModel *model = gtk_tree_view_get_model (treeview);
-
- egg_debug ("repo = %s:%s:%i", repo_id, description, enabled);
-
- gpk_repo_model_get_iter (model, &iter, repo_id);
- gtk_list_store_set (list_store, &iter,
- REPO_COLUMN_ENABLED, enabled,
- REPO_COLUMN_TEXT, description,
- REPO_COLUMN_ID, repo_id,
- REPO_COLUMN_ACTIVE, TRUE,
- REPO_COLUMN_SENSITIVE, TRUE,
- -1);
-
- /* sort after each entry, which is okay as there shouldn't be many */
- gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE(list_store), REPO_COLUMN_TEXT, GTK_SORT_ASCENDING);
-}
-
-/**
* gpk_treeview_add_columns:
**/
static void
@@ -294,99 +343,77 @@ gpk_repos_treeview_clicked_cb (GtkTreeSelection *selection, gpointer data)
}
/**
- * gpk_repo_finished_cb:
+ * gpk_repo_get_repo_list_cb
**/
static void
-gpk_repo_finished_cb (PkClient *client, PkExitEnum exit, guint runtime, gpointer data)
+gpk_repo_get_repo_list_cb (GObject *object, GAsyncResult *res, gpointer user_data)
{
+// PkClient *client = PK_CLIENT (object);
+ GError *error = NULL;
+ PkResults *results = NULL;
+ PkExitEnum exit_enum;
GtkTreeView *treeview;
GtkTreeModel *model;
+ PkItemErrorCode *item_error;
+ GtkWindow *window;
+ GPtrArray *array = NULL;
+ guint i;
+ const PkItemRepoDetail *item;
+ GtkTreeIter iter;
- /* remove the items that are not used */
- treeview = GTK_TREE_VIEW (gtk_builder_get_object (builder, "treeview_repo"));
- model = gtk_tree_view_get_model (treeview);
- gpk_repo_remove_nonactive (model);
-}
-
-/**
- * gpk_repo_status_changed_timeout_cb:
- **/
-static gboolean
-gpk_repo_status_changed_timeout_cb (PkClient *client)
-{
- const gchar *text;
- GtkWidget *widget;
- PkStatusEnum status;
-
-#if PK_CHECK_VERSION(0,5,1)
- /* get the last status */
- g_object_get (client,
- "status", &status,
- NULL);
-#else
- status = status_last;
-#endif
-
- /* set the text and show */
- widget = GTK_WIDGET (gtk_builder_get_object (builder, "viewport_animation_preview"));
- gtk_widget_show (widget);
- widget = GTK_WIDGET (gtk_builder_get_object (builder, "label_animation"));
- text = gpk_status_enum_to_localised_text (status);
- gtk_label_set_label (GTK_LABEL (widget), text);
-
- /* set icon */
- gpk_set_animated_icon_from_status (GPK_ANIMATED_ICON (image_animation), status, GTK_ICON_SIZE_LARGE_TOOLBAR);
-
- /* never repeat */
- status_id = 0;
- return FALSE;
-}
+ /* get the results */
+ results = pk_client_generic_finish (client, res, &error);
+ if (results == NULL) {
+ egg_warning ("failed to get repo list: %s", error->message);
+ g_error_free (error);
+ goto out;
+ }
-/**
- * gpk_repo_status_changed_cb:
- **/
-static void
-gpk_repo_status_changed_cb (PkClient *client, PkStatusEnum status, gpointer data)
-{
- GtkWidget *widget;
+ /* get results */
+ exit_enum = pk_results_get_exit_code (results);
+ if (exit_enum != PK_EXIT_ENUM_SUCCESS) {
+ egg_warning ("failed to get repo list: %s", pk_exit_enum_to_text (exit_enum));
+ item_error = pk_results_get_error_code (results);
- if (status == PK_STATUS_ENUM_FINISHED) {
- /* we've not yet shown, so don't bother */
- if (status_id > 0) {
- g_source_remove (status_id);
- status_id = 0;
- }
- widget = GTK_WIDGET (gtk_builder_get_object (builder, "viewport_animation_preview"));
- gtk_widget_hide (widget);
- gpk_animated_icon_enable_animation (GPK_ANIMATED_ICON (image_animation), FALSE);
+ window = GTK_WINDOW (gtk_builder_get_object (builder, "dialog_repo"));
+ /* TRANSLATORS: for one reason or another, we could not get the list of sources */
+ gpk_error_dialog_modal (window, _("Failed to get the list of sources"),
+ gpk_error_enum_to_localised_text (item_error->code), item_error->details);
+// /* TRANSLATORS: for one reason or another, we could not enable or disable a software source */
+// gpk_error_dialog_modal (window, _("Failed to change status"),
+// gpk_error_enum_to_localised_text (item_error->code), item_error->details);
+
+ pk_item_error_code_unref (item_error);
goto out;
}
- /* already pending show */
- if (status_id > 0)
- goto out;
+ /* add repos */
+ treeview = GTK_TREE_VIEW (gtk_builder_get_object (builder, "treeview_repo"));
+ model = gtk_tree_view_get_model (treeview);
+ array = pk_results_get_repo_detail_array (results);
+ for (i=0; i<array->len; i++) {
+ item = g_ptr_array_index (array, i);
+ egg_debug ("repo = %s:%s:%i", item->repo_id, item->description, item->enabled);
+ gpk_repo_model_get_iter (model, &iter, item->repo_id);
+ gtk_list_store_set (list_store, &iter,
+ REPO_COLUMN_ENABLED, item->enabled,
+ REPO_COLUMN_TEXT, item->description,
+ REPO_COLUMN_ID, item->repo_id,
+ REPO_COLUMN_ACTIVE, TRUE,
+ REPO_COLUMN_SENSITIVE, TRUE,
+ -1);
+ }
- /* only show after some time in the transaction */
- status_id = g_timeout_add (GPK_UI_STATUS_SHOW_DELAY, (GSourceFunc) gpk_repo_status_changed_timeout_cb, client);
-out:
-#if !PK_CHECK_VERSION(0,5,1)
- /* save for the callback */
- status_last = status;
-#endif
- return;
-}
+ /* remove the items that are not now present */
+ gpk_repo_remove_nonactive (model);
-/**
- * gpk_repo_error_code_cb:
- **/
-static void
-gpk_repo_error_code_cb (PkClient *client, PkErrorCodeEnum code, const gchar *details, gpointer data)
-{
- GtkWindow *window;
- window = GTK_WINDOW (gtk_builder_get_object (builder, "dialog_repo"));
- /* TRANSLATORS: for one reason or another, we could not enable or disable a software source */
- gpk_error_dialog_modal (window, _("Failed to change status"),
- gpk_error_enum_to_localised_text (code), details);
+ /* sort */
+ gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE(list_store), REPO_COLUMN_TEXT, GTK_SORT_ASCENDING);
+out:
+ if (array != NULL)
+ g_ptr_array_unref (array);
+ if (results != NULL)
+ g_object_unref (results);
}
/**
@@ -395,8 +422,6 @@ gpk_repo_error_code_cb (PkClient *client, PkErrorCodeEnum code, const gchar *det
static void
gpk_repo_repo_list_refresh (void)
{
- gboolean ret;
- GError *error = NULL;
PkBitfield filters;
GtkTreeView *treeview;
GtkTreeModel *model;
@@ -411,11 +436,9 @@ gpk_repo_repo_list_refresh (void)
filters = pk_bitfield_value (PK_FILTER_ENUM_NOT_DEVELOPMENT);
else
filters = pk_bitfield_value (PK_FILTER_ENUM_NONE);
- ret = pk_client_get_repo_list (client_query, filters, &error);
- if (!ret) {
- egg_warning ("failed to get repo list: %s", error->message);
- g_error_free (error);
- }
+ pk_client_get_repo_list_async (client, filters, NULL,
+ gpk_repo_progress_cb, NULL,
+ gpk_repo_get_repo_list_cb, NULL);
}
/**
@@ -452,43 +475,80 @@ gpk_repo_message_received_cb (UniqueApp *app, UniqueCommand command, UniqueMessa
}
}
-#if !PK_CHECK_VERSION(0,5,1)
+
/**
- * gpk_repo_destroy_cb:
+ * gpk_repo_get_properties_cb:
**/
static void
-gpk_repo_destroy_cb (PkClient *client, gpointer data)
+gpk_repo_get_properties_cb (GObject *object, GAsyncResult *res, GMainLoop *loop)
{
+ GtkWidget *widget;
+ GError *error = NULL;
+ PkControl *control = PK_CONTROL(object);
gboolean ret;
- egg_debug ("client destroyed");
- ret = g_ptr_array_remove (client_array, client);
- if (!ret)
- egg_warning ("failed to remove %p", client);
- /* TODO: disconnect signals? */
- g_object_unref (client);
+// PkBitfield roles;
+
+ /* get the result */
+ ret = pk_control_get_properties_finish (control, res, &error);
+ if (!ret) {
+ /* TRANSLATORS: backend is broken, and won't tell us what it supports */
+ g_print ("%s: %s\n", _("Exiting as backend details could not be retrieved"), error->message);
+ g_error_free (error);
+ g_main_loop_quit (loop);
+ goto out;
+ }
+
+ /* get values */
+ g_object_get (control,
+ "roles", &roles,
+ NULL);
+
+ /* setup GUI */
+ if (pk_bitfield_contain (roles, PK_ROLE_ENUM_GET_REPO_LIST)) {
+ /* get the update list */
+ gpk_repo_repo_list_refresh ();
+ } else {
+ GtkTreeIter iter;
+ GtkTreeView *treeview = GTK_TREE_VIEW (gtk_builder_get_object (builder, "treeview_repo"));
+ GtkTreeModel *model = gtk_tree_view_get_model (treeview);
+
+ gtk_list_store_append (GTK_LIST_STORE(model), &iter);
+ gtk_list_store_set (list_store, &iter,
+ REPO_COLUMN_ENABLED, FALSE,
+ REPO_COLUMN_TEXT, _("Getting software source list not supported by backend"),
+ REPO_COLUMN_ACTIVE, FALSE,
+ REPO_COLUMN_SENSITIVE, FALSE,
+ -1);
+
+ widget = GTK_WIDGET (gtk_builder_get_object (builder, "treeview_repo"));
+ gtk_widget_set_sensitive (widget, FALSE);
+ widget = GTK_WIDGET (gtk_builder_get_object (builder, "checkbutton_detail"));
+ gtk_widget_set_sensitive (widget, FALSE);
+ }
+out:
+ return;
}
/**
- * gpk_repo_create_client
+ * gpk_repo_close_cb:
**/
-static PkClient *
-gpk_repo_create_client (void)
+static void
+gpk_repo_close_cb (GtkWidget *widget, gpointer data)
{
- PkClient *client;
- client = pk_client_new ();
- g_signal_connect (client, "repo-detail",
- G_CALLBACK (gpk_repo_detail_cb), NULL);
- g_signal_connect (client, "status-changed",
- G_CALLBACK (gpk_repo_status_changed_cb), NULL);
- g_signal_connect (client, "error-code",
- G_CALLBACK (gpk_repo_error_code_cb), NULL);
- g_signal_connect (client, "destroy",
- G_CALLBACK (gpk_repo_destroy_cb), NULL);
- g_ptr_array_add (client_array, client);
- egg_debug ("added %p", client);
- return g_object_ref (client);
+ GMainLoop *loop = (GMainLoop *) data;
+ egg_debug ("emitting action-close");
+ g_main_loop_quit (loop);
+}
+
+/**
+ * gpk_repo_delete_event_cb:
+ **/
+static gboolean
+gpk_repo_delete_event_cb (GtkWidget *widget, GdkEvent *event, gpointer data)
+{
+ gpk_repo_close_cb (widget, data);
+ return FALSE;
}
-#endif
/**
* main:
@@ -508,6 +568,7 @@ main (int argc, char *argv[])
guint xid = 0;
gboolean ret;
GtkBox *box;
+ GMainLoop *loop;
const GOptionEntry options[] = {
{ "verbose", 'v', 0, G_OPTION_ARG_NONE, &verbose,
@@ -526,7 +587,6 @@ main (int argc, char *argv[])
if (! g_thread_supported ())
g_thread_init (NULL);
- dbus_g_thread_init ();
g_type_init ();
context = g_option_context_new (NULL);
@@ -559,37 +619,16 @@ main (int argc, char *argv[])
gconf_client = gconf_client_get_default ();
- client_query = pk_client_new ();
- g_signal_connect (client_query, "repo-detail",
- G_CALLBACK (gpk_repo_detail_cb), NULL);
- g_signal_connect (client_query, "status-changed",
- G_CALLBACK (gpk_repo_status_changed_cb), NULL);
- g_signal_connect (client_query, "finished",
- G_CALLBACK (gpk_repo_finished_cb), NULL);
- g_signal_connect (client_query, "error-code",
- G_CALLBACK (gpk_repo_error_code_cb), NULL);
-
-#if PK_CHECK_VERSION(0,5,1)
- pool = pk_client_pool_new ();
- pk_client_pool_connect (pool, "repo-detail",
- G_CALLBACK (gpk_repo_detail_cb), NULL);
- pk_client_pool_connect (pool, "status-changed",
- G_CALLBACK (gpk_repo_status_changed_cb), NULL);
- pk_client_pool_connect (pool, "error-code",
- G_CALLBACK (gpk_repo_error_code_cb), NULL);
-#else
- client_array = g_ptr_array_new ();
-#endif
-
+ loop = g_main_loop_new (NULL, FALSE);
+ client = pk_client_new ();
control = pk_control_new ();
g_signal_connect (control, "repo-list-changed",
G_CALLBACK (gpk_repo_repo_list_changed_cb), NULL);
- roles = pk_control_get_actions (control, NULL);
/* get UI */
builder = gtk_builder_new ();
retval = gtk_builder_add_from_file (builder, GPK_DATA "/gpk-repo.ui", &error);
- if (error != NULL) {
+ if (retval == 0) {
egg_warning ("failed to load ui: %s", error->message);
g_error_free (error);
goto out_build;
@@ -604,10 +643,11 @@ main (int argc, char *argv[])
main_window = GTK_WIDGET (gtk_builder_get_object (builder, "dialog_repo"));
gtk_window_set_icon_name (GTK_WINDOW (main_window), GPK_ICON_SOFTWARE_SOURCES);
- g_signal_connect_swapped (main_window, "delete_event", G_CALLBACK (gtk_main_quit), NULL);
-
+ g_signal_connect (main_window, "delete_event",
+ G_CALLBACK (gpk_repo_delete_event_cb), loop);
widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_close"));
- g_signal_connect_swapped (widget, "clicked", G_CALLBACK (gtk_main_quit), NULL);
+ g_signal_connect (widget, "clicked",
+ G_CALLBACK (gpk_repo_close_cb), loop);
widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_help"));
g_signal_connect (widget, "clicked",
G_CALLBACK (gpk_button_help_cb), NULL);
@@ -651,33 +691,19 @@ main (int argc, char *argv[])
widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_close"));
gtk_widget_grab_focus (widget);
- if (pk_bitfield_contain (roles, PK_ROLE_ENUM_GET_REPO_LIST)) {
- /* get the update list */
- gpk_repo_repo_list_refresh ();
- } else {
- gpk_repo_detail_cb (client_query, "default",
- _("Getting software source list not supported by backend"), FALSE, NULL);
- widget = GTK_WIDGET (gtk_builder_get_object (builder, "treeview_repo"));
- gtk_widget_set_sensitive (widget, FALSE);
- widget = GTK_WIDGET (gtk_builder_get_object (builder, "checkbutton_detail"));
- gtk_widget_set_sensitive (widget, FALSE);
- }
+ /* get properties */
+ pk_control_get_properties_async (control, NULL, (GAsyncReadyCallback) gpk_repo_get_properties_cb, loop);
/* wait */
- gtk_main ();
+ g_main_loop_run (loop);
g_object_unref (list_store);
out_build:
g_object_unref (builder);
g_object_unref (gconf_client);
- g_object_unref (client_query);
g_object_unref (control);
-#if PK_CHECK_VERSION(0,5,1)
- g_object_unref (pool);
-#else
- g_ptr_array_foreach (client_array, (GFunc) g_object_unref, NULL);
- g_ptr_array_free (client_array, TRUE);
-#endif
+ g_object_unref (client);
+ g_main_loop_unref (loop);
unique_out:
g_object_unref (unique_app);
diff --git a/src/gpk-service-pack.c b/src/gpk-service-pack.c
index 058b9ad..a0929b6 100644
--- a/src/gpk-service-pack.c
+++ b/src/gpk-service-pack.c
@@ -550,8 +550,6 @@ main (int argc, char *argv[])
GtkWidget *widget;
GtkFileFilter *filter;
GtkEntryCompletion *completion;
- PkBitfield roles;
- PkControl *control = NULL;
UniqueApp *unique_app;
gboolean ret;
GConfClient *gconf_client = NULL;
@@ -611,10 +609,6 @@ main (int argc, char *argv[])
g_signal_connect (unique_app, "message-received",
G_CALLBACK (gpk_pack_message_received_cb), NULL);
- /* get actions */
- control = pk_control_new ();
- roles = pk_control_get_actions (control, NULL);
-
client = pk_client_new ();
g_signal_connect (client, "progress-changed", G_CALLBACK (gpk_pack_progress_changed_cb), NULL);
@@ -715,8 +709,6 @@ out_unique:
g_object_unref (unique_app);
if (gconf_client != NULL)
g_object_unref (gconf_client);
- if (control != NULL)
- g_object_unref (control);
if (client != NULL)
g_object_unref (client);
g_free (option);
diff --git a/src/gpk-update-viewer.c b/src/gpk-update-viewer.c
index 1ee1a96..b4e9095 100644
--- a/src/gpk-update-viewer.c
+++ b/src/gpk-update-viewer.c
@@ -1717,7 +1717,6 @@ gpk_update_viewer_finished_cb (PkClient *client, PkExitEnum exit, guint runtime,
GtkTreePath *path;
GtkTreeModel *model;
GtkTreeSelection *selection;
- PkBitfield roles;
PkRoleEnum role;
GPtrArray *list;
PkRestartEnum restart;
@@ -1807,11 +1806,6 @@ gpk_update_viewer_finished_cb (PkClient *client, PkExitEnum exit, guint runtime,
if (role == PK_ROLE_ENUM_GET_DETAILS) {
- /* get the distro-upgrades if we support it */
- roles = pk_control_get_actions (control, NULL);
- if (pk_bitfield_contain (roles, PK_ROLE_ENUM_GET_DISTRO_UPGRADES))
- g_idle_add ((GSourceFunc) gpk_update_viewer_finished_get_distro_upgrades_cb, NULL);
-
/* select the first entry in the updates list now we've got data */
widget = GTK_WIDGET (gtk_builder_get_object (builder, "treeview_updates"));
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (widget));
@@ -2737,6 +2731,40 @@ gpk_update_viewer_search_equal_func (GtkTreeModel *model, gint column, const gch
}
/**
+ * pk_prefs_get_properties_cb:
+ **/
+static void
+pk_prefs_get_properties_cb (GObject *object, GAsyncResult *res, GMainLoop *loop)
+{
+ GtkWidget *widget;
+ GError *error = NULL;
+ PkControl *control = PK_CONTROL(object);
+ gboolean ret;
+ PkBitfield roles;
+
+ /* get the result */
+ ret = pk_control_get_properties_finish (control, res, &error);
+ if (!ret) {
+ /* TRANSLATORS: backend is broken, and won't tell us what it supports */
+ g_print ("%s: %s\n", _("Exiting as backend details could not be retrieved"), error->message);
+ g_error_free (error);
+ g_main_loop_quit (loop);
+ goto out;
+ }
+
+ /* get values */
+ g_object_get (control,
+ "roles", &roles,
+ NULL);
+
+ /* get the distro-upgrades if we support it */
+ if (pk_bitfield_contain (roles, PK_ROLE_ENUM_GET_DISTRO_UPGRADES))
+ g_idle_add ((GSourceFunc) gpk_update_viewer_finished_get_distro_upgrades_cb, NULL);
+out:
+ return;
+}
+
+/**
* main:
**/
int
@@ -2748,7 +2776,6 @@ main (int argc, char *argv[])
GtkWidget *main_window;
GtkWidget *widget;
GtkTreeSelection *selection;
- PkBitfield roles;
gboolean ret;
guint retval;
GError *error = NULL;
@@ -2855,8 +2882,8 @@ main (int argc, char *argv[])
g_signal_connect (client_secondary, "finished",
G_CALLBACK (gpk_update_viewer_finished_cb), NULL);
- /* get actions */
- roles = pk_control_get_actions (control, NULL);
+ /* get properties */
+ pk_control_get_properties_async (control, NULL, (GAsyncReadyCallback) pk_prefs_get_properties_cb, loop);
/* get UI */
builder = gtk_builder_new ();
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]