[gnome-software] Do not show reviews with insufficient data



commit e2bc70a495d1590951d3a428ac0c20c855ac1a72
Author: Richard Hughes <richard hughsie com>
Date:   Wed Feb 10 14:01:48 2016 +0000

    Do not show reviews with insufficient data
    
    The service may return reviews without all the data we require in GNOME.

 src/plugins/gs-plugin-xdg-app-reviews.c |   67 +++++++++++++++++++++----------
 1 files changed, 45 insertions(+), 22 deletions(-)
---
diff --git a/src/plugins/gs-plugin-xdg-app-reviews.c b/src/plugins/gs-plugin-xdg-app-reviews.c
index 8b15108..a974c13 100644
--- a/src/plugins/gs-plugin-xdg-app-reviews.c
+++ b/src/plugins/gs-plugin-xdg-app-reviews.c
@@ -113,34 +113,51 @@ static GsReview *
 xdg_app_review_parse_review_object (JsonObject *item)
 {
        GsReview *rev = gs_review_new ();
-       guint64 timestamp;
-       g_autofree gchar *dbid = NULL;
-       g_autoptr(GDateTime) dt = NULL;
 
        /* date */
-       timestamp = json_object_get_int_member (item, "date_created");
-       dt = g_date_time_new_from_unix_utc (timestamp);
-       gs_review_set_date (rev, dt);
+       if (json_object_has_member (item, "date_created")) {
+               guint64 timestamp;
+               g_autoptr(GDateTime) dt = NULL;
+               timestamp = json_object_get_int_member (item, "date_created");
+               dt = g_date_time_new_from_unix_utc (timestamp);
+               gs_review_set_date (rev, dt);
+       }
 
        /* assemble review */
-       gs_review_set_rating (rev, json_object_get_int_member (item, "rating"));
-       gs_review_set_score (rev, json_object_get_int_member (item, "score"));
-       gs_review_set_reviewer (rev, json_object_get_string_member (item, "user_display"));
-       gs_review_set_summary (rev, json_object_get_string_member (item, "summary"));
-       gs_review_set_text (rev, json_object_get_string_member (item, "description"));
-       gs_review_set_version (rev, json_object_get_string_member (item, "version"));
-       gs_review_set_karma (rev, json_object_get_int_member (item, "karma"));
+       if (json_object_has_member (item, "rating"))
+               gs_review_set_rating (rev, json_object_get_int_member (item, "rating"));
+       if (json_object_has_member (item, "score"))
+               gs_review_set_score (rev, json_object_get_int_member (item, "score"));
+       if (json_object_has_member (item, "user_display"))
+               gs_review_set_reviewer (rev, json_object_get_string_member (item, "user_display"));
+       if (json_object_has_member (item, "summary"))
+               gs_review_set_summary (rev, json_object_get_string_member (item, "summary"));
+       if (json_object_has_member (item, "description"))
+               gs_review_set_text (rev, json_object_get_string_member (item, "description"));
+       if (json_object_has_member (item, "version"))
+               gs_review_set_version (rev, json_object_get_string_member (item, "version"));
+       if (json_object_has_member (item, "karma"))
+               gs_review_set_karma (rev, json_object_get_int_member (item, "karma"));
 
        /* add extra metadata for the plugin */
-       gs_review_add_metadata (rev, "user_hash",
-                               json_object_get_string_member (item, "user_id"));
-       gs_review_add_metadata (rev, "user_key",
-                               json_object_get_string_member (item, "user_key"));
-       gs_review_add_metadata (rev, "appid",
-                               json_object_get_string_member (item, "appid"));
-       dbid = g_strdup_printf ("%" G_GINT64_FORMAT,
-                               json_object_get_int_member (item, "dbid"));
-       gs_review_add_metadata (rev, "dbid", dbid);
+       if (json_object_has_member (item, "user_id")) {
+               gs_review_add_metadata (rev, "user_hash",
+                                       json_object_get_string_member (item, "user_id"));
+       }
+       if (json_object_has_member (item, "user_key")) {
+               gs_review_add_metadata (rev, "user_key",
+                                       json_object_get_string_member (item, "user_key"));
+       }
+       if (json_object_has_member (item, "appid")) {
+               gs_review_add_metadata (rev, "appid",
+                                       json_object_get_string_member (item, "appid"));
+       }
+       if (json_object_has_member (item, "dbid")) {
+               g_autofree gchar *dbid = NULL;
+               dbid = g_strdup_printf ("%" G_GINT64_FORMAT,
+                                       json_object_get_int_member (item, "dbid"));
+               gs_review_add_metadata (rev, "dbid", dbid);
+       }
 
        return rev;
 }
@@ -651,6 +668,12 @@ gs_plugin_refine_reviews (GsPlugin *plugin,
        for (i = 0; i < reviews->len; i++) {
                review = g_ptr_array_index (reviews, i);
 
+               /* ignore invalid reviews */
+               if (gs_review_get_rating (review) == 0)
+                       continue;
+               if (gs_review_get_reviewer (review) == NULL)
+                       continue;
+
                /* save this on the application object so we can use it for
                 * submitting a new review */
                if (i == 0) {


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