[gnome-packagekit/glib2: 63/79] moo
- From: Richard Hughes <rhughes src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gnome-packagekit/glib2: 63/79] moo
- Date: Tue, 6 Oct 2009 09:50:01 +0000 (UTC)
commit 9e89a771dec953049491d94dae59d38cb42b784c
Author: Richard Hughes <richard hughsie com>
Date: Sat Oct 3 20:39:06 2009 +0100
moo
src/gpk-update-viewer.c | 697 ++++++++++++++++++++++++-----------------------
1 files changed, 349 insertions(+), 348 deletions(-)
---
diff --git a/src/gpk-update-viewer.c b/src/gpk-update-viewer.c
index 17956e3..b67f4da 100644
--- a/src/gpk-update-viewer.c
+++ b/src/gpk-update-viewer.c
@@ -73,6 +73,7 @@ static guint size_total = 0;
static GConfClient *gconf_client = NULL;
static gchar **install_package_ids = NULL;
static EggConsoleKit *console = NULL;
+static GCancellable *cancellable = NULL;
enum {
GPK_UPDATES_COLUMN_TEXT,
@@ -160,77 +161,8 @@ gpk_update_viewer_button_help_cb (GtkWidget *widget, gpointer data)
static void
gpk_update_viewer_quit (void)
{
- gboolean ret;
- gboolean allow_cancel = FALSE;
- GError *error = NULL;
- PkRoleEnum role;
- PkStatusEnum status;
- GtkWindow *window;
- GtkWidget *dialog;
- GtkResponseType response;
-
/* are we in a transaction */
- ret = pk_client_get_role (PK_CLIENT(task), &role, NULL, &error);
- if (!ret) {
- egg_warning ("failed to get role: %s", error->message);
- g_error_free (error);
- goto out;
- }
- if (role == PK_ROLE_ENUM_UNKNOWN) {
- egg_debug ("no role, so quitting");
- goto out;
- }
- ret = pk_client_get_status (PK_CLIENT(task), &status, &error);
- if (!ret) {
- egg_warning ("failed to get status: %s", error->message);
- g_error_free (error);
- goto out;
- }
- if (status == PK_STATUS_ENUM_FINISHED) {
- egg_debug ("status is finished, so quitting");
- goto out;
- }
-
- /* can we easily cancel */
- ret = pk_client_get_allow_cancel (PK_CLIENT(task), &allow_cancel, &error);
- if (!ret) {
- egg_warning ("failed to get allow cancel state: %s", error->message);
- g_error_free (error);
- goto out;
- }
-
- /* cancel the transaction */
- if (allow_cancel) {
- ret = g_cancellable_cancel (PK_CLIENT(task), &error);
- if (!ret) {
- egg_warning ("failed to cancel client: %s", error->message);
- g_error_free (error);
- }
- goto out;
- }
-
- /* show modal dialog asking for confirmation */
- window = GTK_WINDOW (gtk_builder_get_object (builder, "dialog_updates"));
- dialog = gtk_message_dialog_new (window, GTK_DIALOG_MODAL,
- GTK_MESSAGE_INFO, GTK_BUTTONS_CANCEL,
- "%s", _("Cannot cancel running task"));
-
- /* TRANSLATORS: this is the button text when we check if it's okay to download */
- gtk_dialog_add_button (GTK_DIALOG (dialog), "gtk-quit", GTK_RESPONSE_OK);
-
- /* TRANSLATORS, user clicked the [x] when we cannot cancel what we are doing */
- gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG(dialog),
- "%s", _("There are tasks that cannot be cancelled."));
-
- gtk_window_set_icon_name (GTK_WINDOW(dialog), GPK_ICON_SOFTWARE_INSTALLER);
- response = gtk_dialog_run (GTK_DIALOG(dialog));
- gtk_widget_destroy (dialog);
-
- /* pressed cancel or [x] */
- if (response != GTK_RESPONSE_OK)
- return;
-out:
- g_main_loop_quit (loop);
+ g_cancellable_cancel (cancellable);
}
/**
@@ -259,7 +191,7 @@ gpk_update_viewer_undisable_packages ()
/* set all the checkboxes sensitive */
valid = gtk_tree_model_get_iter_first (model, &iter);
while (valid) {
- gtk_array_store_set (array_store_updates, &iter,
+ gtk_list_store_set (array_store_updates, &iter,
GPK_UPDATES_COLUMN_SENSITIVE, TRUE,
GPK_UPDATES_COLUMN_CLICKABLE, TRUE,
-1);
@@ -330,6 +262,39 @@ out:
}
/**
+ * gpk_update_viewer_update_packages_cb:
+ **/
+static void
+gpk_update_viewer_update_packages_cb (PkTask *_task, GAsyncResult *res, GMainLoop *_loop)
+{
+ PkResults *results;
+ GError *error = NULL;
+ GPtrArray *array = NULL;
+ PkItemPackage *item;
+ guint i;
+
+ /* get the results */
+ results = pk_task_generic_finish (task, res, &error);
+ if (results == NULL) {
+ egg_warning ("failed to update packages: %s", error->message);
+ g_error_free (error);
+ goto out;
+ }
+
+ /* get data */
+ array = pk_results_get_package_array (results);
+ for (i=0; i<array->len; i++) {
+ item = g_ptr_array_index (array, i);
+ }
+
+out:
+ if (array != NULL)
+ g_ptr_array_unref (array);
+ if (results != NULL)
+ g_object_unref (results);
+}
+
+/**
* gpk_update_viewer_button_install_cb:
**/
static void
@@ -345,7 +310,6 @@ gpk_update_viewer_button_install_cb (GtkWidget *widget, gpointer data)
gboolean update;
gboolean selected_any = FALSE;
gchar *package_id;
- GError *error = NULL;
GPtrArray *array = NULL;
gchar **package_ids = NULL;
PkInfoEnum info;
@@ -376,7 +340,7 @@ gpk_update_viewer_button_install_cb (GtkWidget *widget, gpointer data)
GPK_UPDATES_COLUMN_ID, &package_id, -1);
/* set all the checkboxes insensitive */
- gtk_array_store_set (array_store_updates, &iter,
+ gtk_list_store_set (array_store_updates, &iter,
GPK_UPDATES_COLUMN_CLICKABLE, FALSE,
GPK_UPDATES_COLUMN_SENSITIVE, FALSE, -1);
@@ -418,12 +382,9 @@ gpk_update_viewer_button_install_cb (GtkWidget *widget, gpointer data)
install_package_ids = g_strdupv (package_ids);
/* get packages that also have to be updated */
- ret = pk_client_update_packages (PK_CLIENT(task), package_ids, &error);
- if (!ret) {
- egg_warning ("cannot get depends for updates: %s", error->message);
- g_error_free (error);
- goto out;
- }
+ pk_task_update_packages (task, package_ids, cancellable,
+ NULL, NULL,
+ (GAsyncReadyCallback) gpk_update_viewer_update_packages_cb, loop);
out:
g_strfreev (package_ids);
@@ -463,23 +424,29 @@ gpk_update_viewer_button_delete_event_cb (GtkWidget *widget, GdkEvent *event, gp
* gpk_update_viewer_find_iter_model_cb:
**/
static gboolean
-gpk_update_viewer_find_iter_model_cb (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, const gchar *id)
+gpk_update_viewer_find_iter_model_cb (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, const gchar *package_id)
{
- gchar *id_tmp = NULL;
+ gchar *package_id_tmp = NULL;
GtkTreePath **_path = NULL;
- gchar *id_new;
gboolean ret = FALSE;
+ gchar **split;
+ gchar **split_tmp;
_path = (GtkTreePath **) g_object_get_data (G_OBJECT(model), "_path");
- gtk_tree_model_get (model, iter, GPK_UPDATES_COLUMN_ID, &id_tmp, -1);
+ gtk_tree_model_get (model, iter,
+ GPK_UPDATES_COLUMN_ID, &package_id_tmp,
+ -1);
/* only match on the name */
- id_new = xxxnotneededanymore (id_tmp);
- if (g_strcmp0 (id_new->name, id->name) == 0) {
+ split = pk_package_id_split (package_id);
+ split_tmp = pk_package_id_split (package_id_tmp);
+ if (g_strcmp0 (split[PK_PACKAGE_ID_NAME], split_tmp[PK_PACKAGE_ID_NAME]) == 0) {
*_path = gtk_tree_path_copy (path);
ret = TRUE;
}
- g_free (id_new);
+ g_free (package_id_tmp);
+ g_strfreev (split);
+ g_strfreev (split_tmp);
return ret;
}
@@ -518,133 +485,82 @@ gpk_update_viewer_details_cb (PkClient *client, const PkItemDetails *item, gpoin
gtk_tree_model_get_iter (model, &iter, path);
gtk_tree_path_free (path);
- gtk_array_store_set (array_store_updates, &iter,
+ gtk_list_store_set (array_store_updates, &iter,
GPK_UPDATES_COLUMN_DETAILS_OBJ, (gpointer) pk_details_item_copy (item),
GPK_UPDATES_COLUMN_SIZE, (gint)item->size,
GPK_UPDATES_COLUMN_SIZE_DISPLAY, (gint)item->size,
-1);
/* in cache */
if (item->size == 0)
- gtk_array_store_set (array_store_updates, &iter,
+ gtk_list_store_set (array_store_updates, &iter,
GPK_UPDATES_COLUMN_STATUS, GPK_INFO_ENUM_DOWNLOADED, -1);
}
/**
- * gpk_update_viewer_is_update_info:
- **/
-static gboolean
-gpk_update_viewer_is_update_info (PkInfoEnum info)
-{
- if (info == PK_INFO_ENUM_LOW)
- return TRUE;
- if (info == PK_INFO_ENUM_NORMAL)
- return TRUE;
- if (info == PK_INFO_ENUM_IMPORTANT)
- return TRUE;
- if (info == PK_INFO_ENUM_SECURITY)
- return TRUE;
- if (info == PK_INFO_ENUM_BUGFIX)
- return TRUE;
- if (info == PK_INFO_ENUM_ENHANCEMENT)
- return TRUE;
- return FALSE;
-}
-
-/**
* gpk_update_viewer_package_cb:
**/
static void
gpk_update_viewer_package_cb (PkClient *client, const PkItemPackage *item, gpointer data)
{
- PkRoleEnum role;
PkInfoEnum info;
- gchar *text = NULL;
GtkTreeView *treeview;
GtkTreeIter iter;
GtkTreeModel *model;
GtkTreeViewColumn *column;
GtkTreePath *path;
- gboolean selected;
gboolean scroll;
- pk_client_get_role (PK_CLIENT(task), &role, NULL, NULL);
- egg_debug ("role = %s, package = %s:%s:%s", pk_role_enum_to_text (role),
- pk_info_enum_to_text (item->info), "xxx", item->summary);
-
/* used for progress */
- if (!gpk_update_viewer_is_update_info (item->info)) {
- g_free (package_id_last);
- package_id_last = pk_package_id_copy (item->package_id);
-
- /* find model */
- treeview = GTK_TREE_VIEW (gtk_builder_get_object (builder, "treeview_updates"));
- model = gtk_tree_view_get_model (treeview);
-
- /* update icon */
- path = gpk_update_viewer_model_get_path (model, item->package_id);
- if (path == NULL) {
- egg_debug ("not found ID for package");
- goto out;
- }
-
- gtk_tree_model_get_iter (model, &iter, path);
+ g_free (package_id_last);
+ package_id_last = pk_package_id_copy (item->package_id);
- /* scroll to the active cell */
- scroll = gconf_client_get_bool (gconf_client, GPK_CONF_UPDATE_VIEWER_SCROLL_ACTIVE, NULL);
- if (scroll) {
- column = gtk_tree_view_get_column (treeview, 3);
- gtk_tree_view_scroll_to_cell (treeview, path, column, FALSE, 0.0f, 0.0f);
- }
+ /* find model */
+ treeview = GTK_TREE_VIEW (gtk_builder_get_object (builder, "treeview_updates"));
+ model = gtk_tree_view_get_model (treeview);
- /* if the info is finished, change the status to past tense */
- if (item->info == PK_INFO_ENUM_FINISHED) {
- gtk_tree_model_get (model, &iter,
- GPK_UPDATES_COLUMN_STATUS, &info, -1);
- /* promote to past tense if present tense */
- if (info < PK_INFO_ENUM_UNKNOWN)
- info += PK_INFO_ENUM_UNKNOWN;
- } else {
- info = item->info;
- }
- gtk_array_store_set (array_store_updates, &iter,
- GPK_UPDATES_COLUMN_STATUS, info, -1);
+ /* update icon */
+ path = gpk_update_viewer_model_get_path (model, item->package_id);
+ if (path == NULL) {
+ egg_debug ("not found ID for package");
+ goto out;
+ }
- gtk_tree_path_free (path);
+ gtk_tree_model_get_iter (model, &iter, path);
- /* set package description */
- //widget = GTK_WIDGET (gtk_builder_get_object (builder, "label_package"));
- //gtk_label_set_label (GTK_LABEL (widget), item->summary);
+ /* scroll to the active cell */
+ scroll = gconf_client_get_bool (gconf_client, GPK_CONF_UPDATE_VIEWER_SCROLL_ACTIVE, NULL);
+ if (scroll) {
+ column = gtk_tree_view_get_column (treeview, 3);
+ gtk_tree_view_scroll_to_cell (treeview, path, column, FALSE, 0.0f, 0.0f);
+ }
- goto out;
+ /* if the info is finished, change the status to past tense */
+ if (item->info == PK_INFO_ENUM_FINISHED) {
+ gtk_tree_model_get (model, &iter,
+ GPK_UPDATES_COLUMN_STATUS, &info, -1);
+ /* promote to past tense if present tense */
+ if (info < PK_INFO_ENUM_UNKNOWN)
+ info += PK_INFO_ENUM_UNKNOWN;
+ } else {
+ info = item->info;
}
+ gtk_list_store_set (array_store_updates, &iter,
+ GPK_UPDATES_COLUMN_STATUS, info, -1);
- /* add to array store */
- text = gpk_package_id_format_twoline (item->package_id, item->summary);
- selected = (item->info != PK_INFO_ENUM_BLOCKED);
- gtk_array_store_append (array_store_updates, &iter);
- gtk_array_store_set (array_store_updates, &iter,
- GPK_UPDATES_COLUMN_TEXT, text,
- GPK_UPDATES_COLUMN_ID, package_id,
- GPK_UPDATES_COLUMN_INFO, item->info,
- GPK_UPDATES_COLUMN_SELECT, selected,
- GPK_UPDATES_COLUMN_SENSITIVE, selected,
- GPK_UPDATES_COLUMN_CLICKABLE, selected,
- GPK_UPDATES_COLUMN_RESTART, PK_RESTART_ENUM_NONE,
- GPK_UPDATES_COLUMN_STATUS, PK_INFO_ENUM_UNKNOWN,
- GPK_UPDATES_COLUMN_SIZE, 0,
- GPK_UPDATES_COLUMN_SIZE_DISPLAY, 0,
- GPK_UPDATES_COLUMN_PERCENTAGE, 0,
- GPK_UPDATES_COLUMN_PULSE, -1,
- -1);
+ gtk_tree_path_free (path);
+
+ /* set package description */
+ //widget = GTK_WIDGET (gtk_builder_get_object (builder, "label_package"));
+ //gtk_label_set_label (GTK_LABEL (widget), item->summary);
out:
- g_free (text);
+ return;
}
/**
* gpk_update_viewer_update_detail_cb:
**/
static void
-gpk_update_viewer_update_detail_cb (PkClient *client, const PkUpdateDetailObj *item, gpointer data)
+gpk_update_viewer_update_detail_cb (PkClient *client, const PkItemUpdateDetail *item, gpointer data)
{
GtkTreeView *treeview;
GtkTreeModel *model;
@@ -662,7 +578,7 @@ gpk_update_viewer_update_detail_cb (PkClient *client, const PkUpdateDetailObj *i
gtk_tree_model_get_iter (model, &iter, path);
gtk_tree_path_free (path);
- gtk_array_store_set (array_store_updates, &iter,
+ gtk_list_store_set (array_store_updates, &iter,
GPK_UPDATES_COLUMN_UPDATE_DETAIL_OBJ, (gpointer) pk_update_detail_item_copy (item),
GPK_UPDATES_COLUMN_RESTART, item->restart, -1);
}
@@ -921,7 +837,7 @@ gpk_update_viewer_treeview_update_toggled (GtkCellRendererToggle *cell, gchar *p
g_free (package_id);
/* set new value */
- gtk_array_store_set (GTK_LIST_STORE (model), &iter, GPK_UPDATES_COLUMN_SELECT, update, -1);
+ gtk_list_store_set (GTK_LIST_STORE (model), &iter, GPK_UPDATES_COLUMN_SELECT, update, -1);
/* clean up */
gtk_tree_path_free (path);
@@ -1190,7 +1106,7 @@ gpk_update_viewer_get_uris (const gchar *url_string)
* gpk_update_viewer_populate_details:
**/
static void
-gpk_update_viewer_populate_details (const PkUpdateDetailObj *item)
+gpk_update_viewer_populate_details (const PkItemUpdateDetail *item)
{
GtkTreeView *treeview;
GtkTreeSelection *selection;
@@ -1344,7 +1260,7 @@ gpk_packages_treeview_clicked_cb (GtkTreeSelection *selection, gpointer data)
GtkTreeModel *model;
GtkTreeIter iter;
gchar *package_id;
- PkUpdateDetailObj *item = NULL;
+ PkItemUpdateDetail *item = NULL;
/* This will only work in single or browse selection mode! */
if (gtk_tree_selection_get_selected (selection, &model, &iter)) {
@@ -1411,71 +1327,83 @@ out:
}
/**
- * gpk_update_viewer_finished_get_details_cb:
+ * gpk_update_viewer_get_details_cb:
**/
-static gboolean
-gpk_update_viewer_finished_get_details_cb (GPtrArray *array)
+static void
+gpk_update_viewer_get_details_cb (PkClient *client, GAsyncResult *res, GMainLoop *_loop)
{
- gboolean ret;
- gchar **package_ids;
+ PkResults *results;
GError *error = NULL;
- package_ids = pk_package_sack_get_ids (array);
+ GPtrArray *array = NULL;
+ PkItemDetails *item;
+ guint i;
+ GtkWidget *widget;
+ GtkTreePath *path;
+ GtkTreeModel *model;
+ GtkTreeSelection *selection;
- /* get the details of all the packages */
- ret = pk_client_get_details (PK_CLIENT(task), package_ids, &error);
- if (!ret) {
- egg_error ("cannot get details: %s", error->message);
+ /* get the results */
+ results = pk_client_generic_finish (client, res, &error);
+ if (results == NULL) {
+ egg_warning ("failed to get list of categories: %s", error->message);
g_error_free (error);
goto out;
}
-out:
- g_strfreev (package_ids);
- g_ptr_array_unref (array);
- return FALSE;
-}
-/**
- * gpk_update_viewer_finished_get_update_details_cb:
- **/
-static gboolean
-gpk_update_viewer_finished_get_update_details_cb (GPtrArray *array)
-{
- gboolean ret;
- gchar **package_ids;
- GError *error = NULL;
- package_ids = pk_package_sack_get_ids (array);
-
- /* get the details of all the packages */
- ret = pk_client_get_update_detail (PK_CLIENT(task), package_ids, &error);
- if (!ret) {
- egg_error ("cannot get details: %s", error->message);
- g_error_free (error);
- goto out;
+ /* get data */
+ array = pk_results_get_details_array (results);
+ for (i=0; i<array->len; i++) {
+ item = g_ptr_array_index (array, i);
}
+
+ /* select the first entry in the updates array 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));
+ gtk_tree_selection_unselect_all (selection);
+ path = gtk_tree_path_new_first ();
+ gtk_tree_selection_select_path (selection, path);
+ gtk_tree_path_free (path);
+
+ /* set info */
+ gpk_update_viewer_reconsider_info (model);
out:
- g_strfreev (package_ids);
- g_ptr_array_unref (array);
- return FALSE;
+ if (array != NULL)
+ g_ptr_array_unref (array);
+ if (results != NULL)
+ g_object_unref (results);
}
/**
- * gpk_update_viewer_finished_get_distro_upgrades_cb:
+ * gpk_update_viewer_get_update_details_cb:
**/
-static gboolean
-gpk_update_viewer_finished_get_distro_upgrades_cb (gpointer data)
+static void
+gpk_update_viewer_get_update_details_cb (PkClient *client, GAsyncResult *res, GMainLoop *_loop)
{
- gboolean ret;
+ PkResults *results;
GError *error = NULL;
+ GPtrArray *array = NULL;
+ PkItemUpdateDetail *item;
+ guint i;
- /* get the details of all the packages */
- ret = pk_client_get_distro_upgrades (PK_CLIENT(task), &error);
- if (!ret) {
- egg_error ("cannot get details: %s", error->message);
+ /* get the results */
+ results = pk_client_generic_finish (client, res, &error);
+ if (results == NULL) {
+ egg_warning ("failed to get update details: %s", error->message);
g_error_free (error);
goto out;
}
+
+ /* get data */
+ array = pk_results_get_update_detail_array (results);
+ for (i=0; i<array->len; i++) {
+ item = g_ptr_array_index (array, i);
+ }
+
out:
- return FALSE;
+ if (array != NULL)
+ g_ptr_array_unref (array);
+ if (results != NULL)
+ g_object_unref (results);
}
/**
@@ -1568,7 +1496,7 @@ out:
* gpk_update_viewer_deps_update_event_cb:
**/
static void
-gpk_update_viewer_deps_update_event_cb (GpkHelperDepsUpdate *helper, GtkResponseType type, GPtrArray *deps_array, gpointer data)
+gpk_update_viewer_deps_update_event_cb (gpointer *helper, GtkResponseType type, GPtrArray *deps_array, gpointer data)
{
gboolean ret;
GError *error = NULL;
@@ -1609,7 +1537,7 @@ gpk_update_viewer_deps_update_event_cb (GpkHelperDepsUpdate *helper, GtkResponse
/* we found a match */
if (g_strcmp0 (package_id_temp, item->package_id)) {
egg_debug ("selecting %s", id->name);
- gtk_array_store_set (GTK_LIST_STORE (model), &iter,
+ gtk_list_store_set (GTK_LIST_STORE (model), &iter,
GPK_UPDATES_COLUMN_SELECT, TRUE, -1);
found = TRUE;
}
@@ -1622,8 +1550,8 @@ gpk_update_viewer_deps_update_event_cb (GpkHelperDepsUpdate *helper, GtkResponse
if (!found) {
text = gpk_package_id_format_twoline (item->package_id, item->summary);
egg_debug ("adding: id=%s, text=%s", item->package_id, text);
- gtk_array_store_append (array_store_updates, &iter);
- gtk_array_store_set (array_store_updates, &iter,
+ gtk_list_store_append (array_store_updates, &iter);
+ gtk_list_store_set (array_store_updates, &iter,
GPK_UPDATES_COLUMN_TEXT, text,
GPK_UPDATES_COLUMN_ID, item->package_id,
GPK_UPDATES_COLUMN_INFO, item->info,
@@ -1646,12 +1574,9 @@ gpk_update_viewer_deps_update_event_cb (GpkHelperDepsUpdate *helper, GtkResponse
gpk_update_viewer_reconsider_info (model);
/* actually install packages this time */
- ret = pk_client_update_packages (PK_CLIENT(task), TRUE, install_package_ids, &error);
- if (!ret) {
- egg_warning ("cannot install packages: %s", error->message);
- g_error_free (error);
- goto out;
- }
+ pk_task_update_packages_async (task, install_package_ids, cancellable,
+ NULL, NULL,
+ (GAsyncReadyCallback) gpk_update_viewer_update_packages_cb, loop);
out:
return;
}
@@ -1665,17 +1590,12 @@ gpk_update_viewer_finished_cb (PkClient *client, PkExitEnum exit, guint runtime,
GtkWidget *widget;
GtkWidget *dialog;
GtkTreeView *treeview;
- GtkTreePath *path;
GtkTreeModel *model;
- GtkTreeSelection *selection;
PkRoleEnum role;
GPtrArray *array;
PkRestartEnum restart;
gchar *text;
- pk_client_get_role (PK_CLIENT(task), &role, NULL, NULL);
- egg_debug ("role: %s, exit: %s", pk_role_enum_to_text (role), pk_exit_enum_to_text (exit));
-
/* clear package */
widget = GTK_WIDGET (gtk_builder_get_object (builder, "label_package"));
gtk_label_set_label (GTK_LABEL (widget), "");
@@ -1686,14 +1606,6 @@ gpk_update_viewer_finished_cb (PkClient *client, PkExitEnum exit, guint runtime,
widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_quit"));
gtk_widget_set_sensitive (widget, TRUE);
- /* if secondary, ignore */
- if (PK_CLIENT(task) == client &&
- (exit == PK_EXIT_ENUM_KEY_REQUIRED ||
- exit == PK_EXIT_ENUM_EULA_REQUIRED)) {
- egg_debug ("ignoring primary sig-required or eula");
- return;
- }
-
/* get model */
treeview = GTK_TREE_VIEW (gtk_builder_get_object (builder, "treeview_updates"));
model = gtk_tree_view_get_model (treeview);
@@ -1705,54 +1617,6 @@ gpk_update_viewer_finished_cb (PkClient *client, PkExitEnum exit, guint runtime,
return;
}
- if (role == PK_ROLE_ENUM_GET_UPDATES) {
- /* get the download sizes */
- if (update_array != NULL)
- g_object_unref (update_array);
- update_array = pk_results_get_package_array (results);
-
- /* sort by name */
- gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (model), GPK_UPDATES_COLUMN_ID, GTK_SORT_ASCENDING);
-
- /* get the download sizes */
- if (update_array->len > 0)
- g_idle_add ((GSourceFunc) gpk_update_viewer_finished_get_update_details_cb, g_object_ref (update_array));
-
- /* set info */
- gpk_update_viewer_reconsider_info (model);
- }
-
- if (role == PK_ROLE_ENUM_GET_UPDATE_DETAIL) {
- /* get the restarts */
- g_idle_add ((GSourceFunc) gpk_update_viewer_finished_get_details_cb, g_object_ref (update_array));
-
- /* are now able to do action */
- widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_install"));
- gtk_widget_set_sensitive (widget, TRUE);
-
- /* set info */
- gpk_update_viewer_reconsider_info (model);
- }
-
- if (role == PK_ROLE_ENUM_GET_DETAILS) {
-
- /* select the first entry in the updates array 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));
- gtk_tree_selection_unselect_all (selection);
- path = gtk_tree_path_new_first ();
- gtk_tree_selection_select_path (selection, path);
- gtk_tree_path_free (path);
-
- /* set info */
- gpk_update_viewer_reconsider_info (model);
- }
-
- if (role == PK_ROLE_ENUM_GET_DISTRO_UPGRADES) {
- /* set info */
- gpk_update_viewer_reconsider_info (model);
- }
-
/* we've just agreed to auth or a EULA */
if (role == PK_ROLE_ENUM_INSTALL_SIGNATURE ||
role == PK_ROLE_ENUM_ACCEPT_EULA) {
@@ -1900,7 +1764,7 @@ gpk_update_viewer_pulse_active_rows (void)
if (path) {
gtk_tree_model_get_iter (model, &iter, path);
gtk_tree_model_get (model, &iter, GPK_UPDATES_COLUMN_PULSE, &val, -1);
- gtk_array_store_set (GTK_LIST_STORE (model), &iter, GPK_UPDATES_COLUMN_PULSE, val + 1, -1);
+ gtk_list_store_set (GTK_LIST_STORE (model), &iter, GPK_UPDATES_COLUMN_PULSE, val + 1, -1);
gtk_tree_path_free (path);
}
}
@@ -1935,7 +1799,7 @@ gpk_update_viewer_remove_active_row (GtkTreeModel *model, GtkTreePath *path)
GtkTreeIter iter;
gtk_tree_model_get_iter (model, &iter, path);
- gtk_array_store_set (GTK_LIST_STORE (model), &iter, GPK_UPDATES_COLUMN_PULSE, -1, -1);
+ gtk_list_store_set (GTK_LIST_STORE (model), &iter, GPK_UPDATES_COLUMN_PULSE, -1, -1);
ref = gtk_tree_row_reference_new (model, path);
link = g_slist_find_custom (active_rows, (gconstpointer)ref, (GCompareFunc)gpk_update_viewer_compare_refs);
@@ -2000,7 +1864,7 @@ gpk_update_viewer_progress_changed_cb (PkClient *client, guint percentage, guint
}
size_display = size - ((size * subpercentage) / 100);
- gtk_array_store_set (array_store_updates, &iter,
+ gtk_list_store_set (array_store_updates, &iter,
GPK_UPDATES_COLUMN_PERCENTAGE, subpercentage,
GPK_UPDATES_COLUMN_SIZE_DISPLAY, size_display,
-1);
@@ -2061,7 +1925,7 @@ gpk_update_viewer_detail_popup_menu_select_all (GtkWidget *menuitem, gpointer us
while (valid) {
gtk_tree_model_get (model, &iter, GPK_UPDATES_COLUMN_INFO, &info, -1);
if (info != PK_INFO_ENUM_BLOCKED)
- gtk_array_store_set (GTK_LIST_STORE (model), &iter,
+ gtk_list_store_set (GTK_LIST_STORE (model), &iter,
GPK_UPDATES_COLUMN_SELECT, TRUE, -1);
valid = gtk_tree_model_iter_next (model, &iter);
}
@@ -2089,7 +1953,7 @@ gpk_update_viewer_detail_popup_menu_select_security (GtkWidget *menuitem, gpoint
while (valid) {
gtk_tree_model_get (model, &iter, GPK_UPDATES_COLUMN_INFO, &info, -1);
ret = (info == PK_INFO_ENUM_SECURITY);
- gtk_array_store_set (GTK_LIST_STORE (model), &iter,
+ gtk_list_store_set (GTK_LIST_STORE (model), &iter,
GPK_UPDATES_COLUMN_SELECT, ret, -1);
valid = gtk_tree_model_iter_next (model, &iter);
}
@@ -2114,7 +1978,7 @@ gpk_update_viewer_detail_popup_menu_select_none (GtkWidget *menuitem, gpointer u
valid = gtk_tree_model_get_iter_first (model, &iter);
while (valid) {
gtk_tree_model_get (model, &iter, -1);
- gtk_array_store_set (GTK_LIST_STORE (model), &iter,
+ gtk_list_store_set (GTK_LIST_STORE (model), &iter,
GPK_UPDATES_COLUMN_SELECT, FALSE, -1);
valid = gtk_tree_model_iter_next (model, &iter);
}
@@ -2270,19 +2134,112 @@ gpk_update_viewer_message_received_cb (UniqueApp *app, UniqueCommand command, Un
}
/**
+ * gpk_update_viewer_get_updates_cb:
+ **/
+static void
+gpk_update_viewer_get_updates_cb (PkClient *client, GAsyncResult *res, GMainLoop *_loop)
+{
+ PkResults *results;
+ GError *error = NULL;
+ GPtrArray *array = NULL;
+ PkItemPackage *item;
+ gchar *text = NULL;
+ gboolean selected;
+ GtkTreeIter iter;
+ guint i;
+ gchar **package_ids;
+ GtkTreeView *treeview;
+ GtkTreeModel *model;
+ GtkWidget *widget;
+
+ /* get the results */
+ results = pk_client_generic_finish (client, res, &error);
+ if (results == NULL) {
+ egg_warning ("failed to get list of updates: %s", error->message);
+ g_error_free (error);
+ goto out;
+ }
+
+ /* get data */
+ array = pk_results_get_package_array (results);
+ for (i=0; i<array->len; i++) {
+ item = g_ptr_array_index (array, i);
+
+ /* add to array store */
+ text = gpk_package_id_format_twoline (item->package_id, item->summary);
+ selected = (item->info != PK_INFO_ENUM_BLOCKED);
+ gtk_list_store_append (array_store_updates, &iter);
+ gtk_list_store_set (array_store_updates, &iter,
+ GPK_UPDATES_COLUMN_TEXT, text,
+ GPK_UPDATES_COLUMN_ID, item->package_id,
+ GPK_UPDATES_COLUMN_INFO, item->info,
+ GPK_UPDATES_COLUMN_SELECT, selected,
+ GPK_UPDATES_COLUMN_SENSITIVE, selected,
+ GPK_UPDATES_COLUMN_CLICKABLE, selected,
+ GPK_UPDATES_COLUMN_RESTART, PK_RESTART_ENUM_NONE,
+ GPK_UPDATES_COLUMN_STATUS, PK_INFO_ENUM_UNKNOWN,
+ GPK_UPDATES_COLUMN_SIZE, 0,
+ GPK_UPDATES_COLUMN_SIZE_DISPLAY, 0,
+ GPK_UPDATES_COLUMN_PERCENTAGE, 0,
+ GPK_UPDATES_COLUMN_PULSE, -1,
+ -1);
+ g_free (text);
+ }
+
+ /* get the download sizes */
+ if (update_array != NULL)
+ g_ptr_array_unref (update_array);
+ update_array = pk_results_get_package_array (results);
+
+ /* sort by name */
+ gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (model), GPK_UPDATES_COLUMN_ID, GTK_SORT_ASCENDING);
+
+ /* get the download sizes */
+ if (update_array->len > 0) {
+ package_ids = pk_package_sack_get_ids (array);
+
+ /* get the details of all the packages */
+ pk_client_get_update_detail_async (PK_CLIENT(task), package_ids, cancellable,
+ NULL, NULL,
+ (GAsyncReadyCallback) gpk_update_viewer_get_details_cb, loop);
+
+ /* get the details of all the packages */
+ pk_client_get_details_async (PK_CLIENT(task), package_ids, cancellable,
+ NULL, NULL,
+ (GAsyncReadyCallback) gpk_update_viewer_get_details_cb, loop);
+
+ g_strfreev (package_ids);
+ }
+
+ /* are now able to do action */
+ widget = GTK_WIDGET (gtk_builder_get_object (builder, "button_install"));
+ gtk_widget_set_sensitive (widget, TRUE);
+
+ /* set info */
+ treeview = GTK_TREE_VIEW (gtk_builder_get_object (builder, "treeview_updates"));
+ model = gtk_tree_view_get_model (treeview);
+ gpk_update_viewer_reconsider_info (model);
+
+out:
+ if (array != NULL)
+ g_ptr_array_unref (array);
+ if (results != NULL)
+ g_object_unref (results);
+}
+
+/**
* gpk_update_viewer_get_new_update_array
**/
static gboolean
gpk_update_viewer_get_new_update_array (void)
{
gboolean ret;
- GError *error = NULL;
GtkWidget *widget;
gchar *text = NULL;
PkBitfield filter = PK_FILTER_ENUM_NONE;
/* clear all widgets */
- gtk_array_store_clear (array_store_updates);
+ gtk_list_store_clear (array_store_updates);
gtk_text_buffer_set_text (text_buffer, "", -1);
widget = GTK_WIDGET (gtk_builder_get_object (builder, "label_header_title"));
@@ -2293,17 +2250,14 @@ gpk_update_viewer_get_new_update_array (void)
/* only show newest updates? */
ret = gconf_client_get_bool (gconf_client, GPK_CONF_UPDATE_VIEWER_ONLY_NEWEST, NULL);
if (ret) {
- egg_warning ("only showing newest updates");
+ egg_debug ("only showing newest updates");
filter = pk_bitfield_from_enums (PK_FILTER_ENUM_NEWEST, -1);
}
/* get new array */
- ret = pk_client_get_updates (PK_CLIENT(task), filter, &error);
- if (!ret) {
- egg_warning ("Failed to get updates: %s", error->message);
- g_error_free (error);
- }
-out:
+ pk_client_get_updates_async (PK_CLIENT(task), filter, cancellable,
+ NULL, NULL,
+ (GAsyncReadyCallback) gpk_update_viewer_get_updates_cb, loop);
g_free (text);
return ret;
}
@@ -2320,31 +2274,6 @@ gpk_update_viewer_allow_cancel_cb (PkClient *client, gboolean allow_cancel, gpoi
}
/**
- * pk_client_distro_upgrade_cb:
- **/
-static void
-pk_client_distro_upgrade_cb (PkClient *client, const PkItemDistroUpgrade *item, gpointer data)
-{
- gchar *text;
- gchar *text_format;
- GtkWidget *widget;
-
- if (item->state != PK_UPDATE_STATE_ENUM_STABLE)
- return;
-
- /* only display last (newest) distro */
- widget = GTK_WIDGET (gtk_builder_get_object (builder, "label_upgrade"));
- /* TRANSLATORS: new distro available, e.g. F9 to F10 */
- text = g_strdup_printf (_("New distribution upgrade release '%s' is available"), item->summary);
- text_format = g_strdup_printf ("<b>%s</b>", text);
- gtk_label_set_label (GTK_LABEL (widget), text_format);
- g_free (text);
- g_free (text_format);
- widget = GTK_WIDGET (gtk_builder_get_object (builder, "viewport_upgrade"));
- gtk_widget_show (widget);
-}
-
-/**
* gpk_update_viewer_textview_follow_link:
*
* Looks at all tags covering the position of iter in the text view,
@@ -2561,14 +2490,85 @@ gpk_update_viewer_search_equal_func (GtkTreeModel *model, gint column, const gch
}
/**
- * pk_prefs_get_properties_cb:
+ * gpk_update_viewer_get_distro_upgrades_best:
+ **/
+static PkItemDistroUpgrade *
+gpk_update_viewer_get_distro_upgrades_best (GPtrArray *array)
+{
+ PkItemDistroUpgrade *item;
+ guint i;
+
+ /* find a stable update */
+ for (i=0; i<array->len; i++) {
+ item = g_ptr_array_index (array, i);
+ if (item->state == PK_UPDATE_STATE_ENUM_STABLE)
+ goto out;
+ }
+ item = NULL;
+out:
+ return item;
+}
+
+/**
+ * gpk_update_viewer_get_distro_upgrades_cb:
**/
static void
-pk_prefs_get_properties_cb (GObject *object, GAsyncResult *res, GMainLoop *loop)
+gpk_update_viewer_get_distro_upgrades_cb (PkClient *client, GAsyncResult *res, GMainLoop *_loop)
{
+ PkResults *results;
+ GError *error = NULL;
+ GPtrArray *array = NULL;
+ PkItemDistroUpgrade *item;
+ gchar *text = NULL;
+ gchar *text_format = NULL;
GtkWidget *widget;
+ GtkTreeView *treeview;
+ GtkTreeModel *model;
+
+ /* get the results */
+ results = pk_client_generic_finish (client, res, &error);
+ if (results == NULL) {
+ egg_warning ("failed to get list of distro upgrades: %s", error->message);
+ g_error_free (error);
+ goto out;
+ }
+
+ /* get data */
+ array = pk_results_get_distro_upgrade_array (results);
+ item = gpk_update_viewer_get_distro_upgrades_best (array);
+ if (item == NULL)
+ goto out;
+
+ /* only display last (newest) distro */
+ widget = GTK_WIDGET (gtk_builder_get_object (builder, "label_upgrade"));
+ /* TRANSLATORS: new distro available, e.g. F9 to F10 */
+ text = g_strdup_printf (_("New distribution upgrade release '%s' is available"), item->summary);
+ text_format = g_strdup_printf ("<b>%s</b>", text);
+ gtk_label_set_label (GTK_LABEL (widget), text_format);
+
+ widget = GTK_WIDGET (gtk_builder_get_object (builder, "viewport_upgrade"));
+ gtk_widget_show (widget);
+
+ /* get model */
+ treeview = GTK_TREE_VIEW (gtk_builder_get_object (builder, "treeview_updates"));
+ model = gtk_tree_view_get_model (treeview);
+ gpk_update_viewer_reconsider_info (model);
+out:
+ g_free (text);
+ g_free (text_format);
+ if (array != NULL)
+ g_ptr_array_unref (array);
+ if (results != NULL)
+ g_object_unref (results);
+}
+/**
+ * gpk_update_viewer_get_properties_cb:
+ **/
+static void
+gpk_update_viewer_get_properties_cb (PkControl *_control, GAsyncResult *res, GMainLoop *_loop)
+{
+// GtkWidget *widget;
GError *error = NULL;
- PkControl *control = PK_CONTROL(object);
gboolean ret;
PkBitfield roles;
@@ -2588,8 +2588,11 @@ pk_prefs_get_properties_cb (GObject *object, GAsyncResult *res, GMainLoop *loop)
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);
+ if (pk_bitfield_contain (roles, PK_ROLE_ENUM_GET_DISTRO_UPGRADES)) {
+ pk_client_get_distro_upgrades_async (PK_CLIENT(task), cancellable,
+ NULL, NULL,
+ (GAsyncReadyCallback) gpk_update_viewer_get_distro_upgrades_cb, loop);
+ }
out:
return;
}
@@ -2669,6 +2672,7 @@ main (int argc, char *argv[])
g_signal_connect (unique_app, "message-received", G_CALLBACK (gpk_update_viewer_message_received_cb), NULL);
+ cancellable = g_cancellable_new ();
markdown = egg_markdown_new ();
egg_markdown_set_output (markdown, EGG_MARKDOWN_OUTPUT_PANGO);
egg_markdown_set_escape (markdown, TRUE);
@@ -2681,10 +2685,10 @@ main (int argc, char *argv[])
G_CALLBACK (gpk_update_viewer_updates_changed_cb), NULL);
/* this is what we use mainly */
- client = PK_TASK(gpk_task_new ());
+ task = PK_TASK(gpk_task_new ());
/* get properties */
- pk_control_get_properties_async (control, NULL, (GAsyncReadyCallback) pk_prefs_get_properties_cb, loop);
+ pk_control_get_properties_async (control, NULL, (GAsyncReadyCallback) gpk_update_viewer_get_properties_cb, loop);
/* get UI */
builder = gtk_builder_new ();
@@ -2700,7 +2704,7 @@ main (int argc, char *argv[])
gtk_window_set_icon_name (GTK_WINDOW (main_window), GPK_ICON_SOFTWARE_INSTALLER);
/* create array stores */
- array_store_updates = gtk_array_store_new (GPK_UPDATES_COLUMN_LAST, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT,
+ array_store_updates = gtk_list_store_new (GPK_UPDATES_COLUMN_LAST, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT,
G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN,
G_TYPE_UINT, G_TYPE_UINT, G_TYPE_UINT, G_TYPE_UINT,
G_TYPE_UINT, G_TYPE_POINTER, G_TYPE_POINTER, G_TYPE_INT);
@@ -2811,11 +2815,7 @@ main (int argc, char *argv[])
g_main_loop_run (loop);
/* we might have visual stuff running, close it down */
- ret = g_cancellable_cancel (PK_CLIENT(task), &error);
- if (!ret) {
- egg_warning ("failed to cancel client: %s", error->message);
- g_clear_error (&error);
- }
+ g_cancellable_cancel (cancellable);
g_main_loop_unref (loop);
@@ -2830,7 +2830,8 @@ out_build:
g_object_unref (gconf_client);
g_object_unref (control);
g_object_unref (markdown);
- g_object_unref (PK_CLIENT(task));
+ g_object_unref (cancellable);
+ g_object_unref (task);
g_object_unref (console);
g_object_unref (builder);
unique_out:
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]