From fecde682125cfba5ea667c75889282eedadbe41f Mon Sep 17 00:00:00 2001 From: Giovanni Campagna Date: Mon, 24 Feb 2014 17:51:06 +0100 Subject: [PATCH 1/3] Include summary in PkDetails The package summary is already part of PkPackage, but to get that one needs a separate Resolve() call, and it doesn't work for GetDetailsLocal(). https://bugs.freedesktop.org/show_bug.cgi?id=74620 --- lib/packagekit-glib2/pk-client.c | 53 ++++++++++++++++++++++++++------------- lib/packagekit-glib2/pk-details.c | 37 +++++++++++++++++++++++++++ lib/packagekit-glib2/pk-details.h | 1 + src/pk-transaction.c | 36 +++++++++++++++++--------- 4 files changed, 97 insertions(+), 30 deletions(-) diff --git a/lib/packagekit-glib2/pk-client.c b/lib/packagekit-glib2/pk-client.c index 4d74177..f36d8a2 100644 --- a/lib/packagekit-glib2/pk-client.c +++ b/lib/packagekit-glib2/pk-client.c @@ -1147,25 +1147,42 @@ pk_client_signal_cb (GDBusProxy *proxy, } if (g_strcmp0 (signal_name, "Details") == 0) { PkDetails *item; - g_variant_get (parameters, - "(&s&su&s&st)", - &tmp_str[0], - &tmp_str[1], - &tmp_uint, - &tmp_str[3], - &tmp_str[4], - &tmp_uint64); item = pk_details_new (); - g_object_set (item, - "package-id", tmp_str[0], - "license", tmp_str[1], - "group", tmp_uint, - "description", tmp_str[3], - "url", tmp_str[4], - "size", tmp_uint64, - "role", state->role, - "transaction-id", state->transaction_id, - NULL); + if (g_variant_is_of_type (parameters, G_VARIANT_TYPE ("(a{sv})"))) { + GVariantIter *dictionary; + gchar *key; + GVariant *value; + + g_variant_get_child (parameters, 0, "a{sv}", &dictionary); + while (g_variant_iter_loop (dictionary, "{sv}", &key, &value)) { + if (g_strcmp0 (key, "group") == 0) + g_object_set (item, "group", g_variant_get_uint32 (value), NULL); + else if (g_strcmp0 (key, "size") == 0) + g_object_set (item, "size", g_variant_get_uint64 (value), NULL); + else + g_object_set (item, key, g_variant_get_string (value, NULL), NULL); + } + g_variant_iter_free (dictionary); + } else { + g_variant_get (parameters, + "(&s&su&s&st)", + &tmp_str[0], + &tmp_str[1], + &tmp_uint, + &tmp_str[3], + &tmp_str[4], + &tmp_uint64); + g_object_set (item, + "package-id", tmp_str[0], + "license", tmp_str[1], + "group", tmp_uint, + "description", tmp_str[3], + "url", tmp_str[4], + "size", tmp_uint64, + "role", state->role, + "transaction-id", state->transaction_id, + NULL); + } pk_results_add_details (state->results, item); g_object_unref (item); return; diff --git a/lib/packagekit-glib2/pk-details.c b/lib/packagekit-glib2/pk-details.c index dbaf81d..8195256 100644 --- a/lib/packagekit-glib2/pk-details.c +++ b/lib/packagekit-glib2/pk-details.c @@ -50,6 +50,7 @@ struct _PkDetailsPrivate PkGroupEnum group; gchar *description; gchar *url; + gchar *summary; guint64 size; }; @@ -61,6 +62,7 @@ enum { PROP_DESCRIPTION, PROP_URL, PROP_SIZE, + PROP_SUMMARY, PROP_LAST }; @@ -152,6 +154,23 @@ pk_details_get_url (PkDetails *details) } /** + * pk_details_get_summary: + * @details: a #PkDetails instance + * + * Gets the summary for the details object. + * + * Return value: string value + * + * Since: 0.9.1 + **/ +const gchar * +pk_details_get_summary (PkDetails *details) +{ + g_return_val_if_fail (details != NULL, NULL); + return details->priv->summary; +} + +/** * pk_details_get_size: * @details: a #PkDetails instance * @@ -196,6 +215,9 @@ pk_details_get_property (GObject *object, guint prop_id, GValue *value, GParamSp case PROP_SIZE: g_value_set_uint64 (value, priv->size); break; + case PROP_SUMMARY: + g_value_set_string (value, priv->summary); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -231,6 +253,10 @@ pk_details_set_property (GObject *object, guint prop_id, const GValue *value, GP g_free (priv->url); priv->url = g_strdup (g_value_get_string (value)); break; + case PROP_SUMMARY: + g_free (priv->summary); + priv->summary = g_strdup (g_value_get_string (value)); + break; case PROP_SIZE: priv->size = g_value_get_uint64 (value); break; @@ -312,6 +338,16 @@ pk_details_class_init (PkDetailsClass *klass) G_PARAM_READWRITE); g_object_class_install_property (object_class, PROP_SIZE, pspec); + /** + * PkDetails:summary: + * + * Since: 0.9.1 + */ + pspec = g_param_spec_string ("summary", NULL, NULL, + NULL, + G_PARAM_READWRITE); + g_object_class_install_property (object_class, PROP_SUMMARY, pspec); + g_type_class_add_private (klass, sizeof (PkDetailsPrivate)); } @@ -337,6 +373,7 @@ pk_details_finalize (GObject *object) g_free (priv->license); g_free (priv->description); g_free (priv->url); + g_free (priv->summary); G_OBJECT_CLASS (pk_details_parent_class)->finalize (object); } diff --git a/lib/packagekit-glib2/pk-details.h b/lib/packagekit-glib2/pk-details.h index 76b9687..2be8dbc 100644 --- a/lib/packagekit-glib2/pk-details.h +++ b/lib/packagekit-glib2/pk-details.h @@ -70,6 +70,7 @@ PkGroupEnum pk_details_get_group (PkDetails *details); const gchar *pk_details_get_description (PkDetails *details); const gchar *pk_details_get_url (PkDetails *details); guint64 pk_details_get_size (PkDetails *details); +const gchar *pk_details_get_summary (PkDetails *details); G_END_DECLS diff --git a/src/pk-transaction.c b/src/pk-transaction.c index e2c2c4e..6c910a9 100644 --- a/src/pk-transaction.c +++ b/src/pk-transaction.c @@ -502,8 +502,10 @@ pk_transaction_details_cb (PkBackendJob *job, gchar *description; gchar *license; gchar *url; + gchar *summary; guint64 size; PkGroupEnum group; + GVariantBuilder builder; g_return_if_fail (PK_IS_TRANSACTION (transaction)); g_return_if_fail (transaction->priv->tid != NULL); @@ -519,28 +521,38 @@ pk_transaction_details_cb (PkBackendJob *job, "license", &license, "url", &url, "size", &size, + "summary", &summary, NULL); /* emit */ g_debug ("emitting details"); + g_variant_builder_init (&builder, G_VARIANT_TYPE("a{sv}")); + g_variant_builder_add (&builder, "{sv}", "package-id", + g_variant_new_take_string (package_id)); + g_variant_builder_add (&builder, "{sv}", "group", + g_variant_new_uint32 (group)); + if (summary != NULL) + g_variant_builder_add (&builder, "{sv}", "summary", + g_variant_new_take_string (summary)); + if (description != NULL) + g_variant_builder_add (&builder, "{sv}", "description", + g_variant_new_take_string (description)); + if (url != NULL) + g_variant_builder_add (&builder, "{sv}", "url", + g_variant_new_take_string (url)); + if (license != NULL) + g_variant_builder_add (&builder, "{sv}", "license", + g_variant_new_take_string (license)); + g_variant_builder_add (&builder, "{sv}", "size", + g_variant_new_uint64 (size)); + g_dbus_connection_emit_signal (transaction->priv->connection, NULL, transaction->priv->tid, PK_DBUS_INTERFACE_TRANSACTION, "Details", - g_variant_new ("(ssusst)", - package_id, - license != NULL ? license : "", - group, - description != NULL ? description : "", - url != NULL ? url : "", - size), + g_variant_new ("(a{sv})", &builder), NULL); - - g_free (package_id); - g_free (description); - g_free (license); - g_free (url); } /** -- 1.8.5.3