[gnome-software/wip/temp/ubuntu-xenial-rebased: 180/326] Match our own reviews



commit da0f730fbd0d91807190cf1eae175864487fa90b
Author: Robert Ancell <robert ancell canonical com>
Date:   Fri Apr 1 15:17:23 2016 +1300

    Match our own reviews

 src/plugins/gs-plugin-ubuntu-reviews.c |   41 ++++++++++++++++++++++++++++++-
 src/plugins/gs-ubuntuone.c             |   25 ++++++++++++++-----
 2 files changed, 57 insertions(+), 9 deletions(-)
---
diff --git a/src/plugins/gs-plugin-ubuntu-reviews.c b/src/plugins/gs-plugin-ubuntu-reviews.c
index 3b787f9..d53b7e5 100644
--- a/src/plugins/gs-plugin-ubuntu-reviews.c
+++ b/src/plugins/gs-plugin-ubuntu-reviews.c
@@ -921,8 +921,9 @@ parse_date_time (const gchar *text)
 }
 
 static GsReview *
-parse_review (JsonNode *node)
+parse_review (GsPlugin *plugin, JsonNode *node)
 {
+       GsPluginPrivate *priv = plugin->priv;
        GsReview *review;
        JsonObject *object;
        gint64 star_rating;
@@ -934,6 +935,8 @@ parse_review (JsonNode *node)
        object = json_node_get_object (node);
 
        review = gs_review_new ();
+       if (g_strcmp0 (priv->consumer_key, json_object_get_string_member (object, "reviewer_username")) == 0)
+               gs_review_add_flags (review, GS_REVIEW_FLAG_SELF);
        gs_review_set_reviewer (review, json_object_get_string_member (object, "reviewer_displayname"));
        gs_review_set_summary (review, json_object_get_string_member (object, "summary"));
        gs_review_set_text (review, json_object_get_string_member (object, "review_text"));
@@ -961,7 +964,7 @@ parse_reviews (GsPlugin *plugin, JsonParser *parser, GsApp *app, GError **error)
                g_autoptr(GsReview) review = NULL;
 
                /* Read in from JSON... (skip bad entries) */
-               review = parse_review (json_array_get_element (array, i));
+               review = parse_review (plugin, json_array_get_element (array, i));
                if (review != NULL)
                        gs_app_add_review (app, review);
        }
@@ -1051,11 +1054,45 @@ refine_rating (GsPlugin *plugin, GsApp *app, GError **error)
 }
 
 static gboolean
+get_ubuntuone_credentials (GsPlugin  *plugin,
+                          gboolean   required,
+                          GError   **error)
+{
+       GsPluginPrivate *priv = plugin->priv;
+
+       /* Use current credentials if already available */
+       if (priv->consumer_key != NULL &&
+           priv->consumer_secret != NULL &&
+           priv->token_key != NULL &&
+           priv->token_secret != NULL)
+               return TRUE;
+
+       /* Otherwise start with a clean slate */
+       g_clear_pointer (&priv->token_secret, g_free);
+       g_clear_pointer (&priv->token_key, g_free);
+       g_clear_pointer (&priv->consumer_secret, g_free);
+       g_clear_pointer (&priv->consumer_key, g_free);
+
+       /* Use credentials if we have them */
+       if (gs_ubuntuone_get_credentials (&priv->consumer_key, &priv->consumer_secret, &priv->token_key, 
&priv->token_secret))
+               return TRUE;
+
+       /* Otherwise log in to get them */
+       if (required)
+               return gs_ubuntuone_sign_in (&priv->consumer_key, &priv->consumer_secret, &priv->token_key, 
&priv->token_secret, error);
+       else
+               return TRUE;
+}
+
+static gboolean
 refine_reviews (GsPlugin *plugin, GsApp *app, GError **error)
 {
        GPtrArray *sources;
        guint i;
 
+       if (!get_ubuntuone_credentials (plugin, FALSE, error))
+               return FALSE;
+
        /* Skip if already has reviews */
        if (gs_app_get_reviews (app)->len > 0)
                return TRUE;
diff --git a/src/plugins/gs-ubuntuone.c b/src/plugins/gs-ubuntuone.c
index 328b61b..925bc93 100644
--- a/src/plugins/gs-ubuntuone.c
+++ b/src/plugins/gs-ubuntuone.c
@@ -184,7 +184,7 @@ show_login_dialog (gpointer user_data)
 }
 
 gboolean
-gs_ubuntuone_sign_in (gchar **consumer_key, gchar **consumer_secret, gchar **token_key, gchar 
**token_secret, GError **error)
+gs_ubuntuone_get_credentials (gchar **consumer_key, gchar **consumer_secret, gchar **token_key, gchar 
**token_secret)
 {
        static SecretSchema schema = {
                SCHEMA_NAME,
@@ -193,7 +193,6 @@ gs_ubuntuone_sign_in (gchar **consumer_key, gchar **consumer_secret, gchar **tok
        };
 
        SecretContext secret_context = { 0 };
-       LoginContext login_context = { 0 };
 
        /* Use credentials from libsecret if available */
        secret_context.waiting = 4;
@@ -247,11 +246,23 @@ gs_ubuntuone_sign_in (gchar **consumer_key, gchar **consumer_secret, gchar **tok
                return TRUE;
        }
 
-       /* Otherwise start with a clean slate */
-       g_clear_pointer (&secret_context.token_secret, g_free);
-       g_clear_pointer (&secret_context.token_key, g_free);
-       g_clear_pointer (&secret_context.consumer_secret, g_free);
-       g_clear_pointer (&secret_context.consumer_key, g_free);
+       g_free (&secret_context.token_secret);
+       g_free (&secret_context.token_key);
+       g_free (&secret_context.consumer_secret);
+       g_free (&secret_context.consumer_key);
+       return FALSE;
+}
+
+gboolean
+gs_ubuntuone_sign_in (gchar **consumer_key, gchar **consumer_secret, gchar **token_key, gchar 
**token_secret, GError **error)
+{
+       static SecretSchema schema = {
+               SCHEMA_NAME,
+               SECRET_SCHEMA_NONE,
+               { { "key", SECRET_SCHEMA_ATTRIBUTE_STRING } }
+       };
+
+       LoginContext login_context = { 0 };
 
        /* Pop up a login dialog */
        login_context.error = error;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]