[gnome-software/wip/hughsie/moderate] f



commit 96bb966ab9653f48bdc7a965ca67ee2237f0f121
Author: Richard Hughes <richard hughsie com>
Date:   Thu Feb 11 20:40:08 2016 +0000

    f

 src/gs-review-row.ui                    |   13 ++++
 src/gs-shell-moderate.c                 |   24 +++++++
 src/plugins/gs-plugin-xdg-app-reviews.c |  114 ++++++++++++++-----------------
 3 files changed, 89 insertions(+), 62 deletions(-)
---
diff --git a/src/gs-review-row.ui b/src/gs-review-row.ui
index 936e8f7..4f28057 100644
--- a/src/gs-review-row.ui
+++ b/src/gs-review-row.ui
@@ -138,6 +138,19 @@
                 <property name="position">2</property>
               </packing>
             </child>
+            <child>
+              <object class="GtkButton" id="button_neutral">
+                <property name="label" translatable="yes">Meh</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">3</property>
+              </packing>
+            </child>
           </object>
           <packing>
             <property name="left_attach">0</property>
diff --git a/src/gs-shell-moderate.c b/src/gs-shell-moderate.c
index 4036458..54b9737 100644
--- a/src/gs-shell-moderate.c
+++ b/src/gs-shell-moderate.c
@@ -130,6 +130,8 @@ gs_shell_moderate_add_app (GsShellModerate *self, GsApp *app)
        for (i = 0; i < reviews->len; i++) {
                GsReview *review = g_ptr_array_index (reviews, i);
                GtkWidget *row = gs_review_row_new (review);
+               gtk_widget_set_margin_start (row, 250);
+               gtk_widget_set_margin_end (row, 250);
                gs_review_row_set_actions (GS_REVIEW_ROW (row),
                                           1 << GS_REVIEW_ACTION_UPVOTE |
                                           1 << GS_REVIEW_ACTION_DOWNVOTE |
@@ -238,6 +240,24 @@ gs_shell_moderate_switch_to (GsShellModerate *self, gboolean scroll_up)
 }
 
 /**
+ * gs_shell_installed_list_header_func
+ **/
+static void
+gs_shell_installed_list_header_func (GtkListBoxRow *row,
+                                    GtkListBoxRow *before,
+                                    gpointer user_data)
+{
+       GtkWidget *header;
+       gtk_list_box_row_set_header (row, NULL);
+       if (before == NULL)
+               return;
+       if (GS_IS_REVIEW_ROW (before) && GS_IS_APP_ROW (row)) {
+               header = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
+               gtk_list_box_row_set_header (row, header);
+       }
+}
+
+/**
  * gs_shell_moderate_setup:
  */
 void
@@ -254,6 +274,10 @@ gs_shell_moderate_setup (GsShellModerate *self,
        self->builder = g_object_ref (builder);
        self->cancellable = g_object_ref (cancellable);
 
+       gtk_list_box_set_header_func (GTK_LIST_BOX (self->list_box_install),
+                                     gs_shell_installed_list_header_func,
+                                     self, NULL);
+
        /* setup moderate */
        g_signal_connect (self->list_box_install, "row-activated",
                          G_CALLBACK (gs_shell_moderate_app_row_activated_cb), self);
diff --git a/src/plugins/gs-plugin-xdg-app-reviews.c b/src/plugins/gs-plugin-xdg-app-reviews.c
index 933cfda..5c62919 100644
--- a/src/plugins/gs-plugin-xdg-app-reviews.c
+++ b/src/plugins/gs-plugin-xdg-app-reviews.c
@@ -321,47 +321,6 @@ xdg_app_review_parse_success (const gchar *data,
        return TRUE;
 }
 
-#if 0
-/**
- * xdg_app_review_get_moderate:
- */
-static GPtrArray *
-xdg_app_review_get_moderate (SoupSession *session,
-                            const gchar *user_hash,
-                            GError **error)
-{
-       guint status_code;
-       g_autofree gchar *uri = NULL;
-       g_autoptr(SoupMessage) msg = NULL;
-       g_autoptr(GFile) cachefn_file = NULL;
-       g_autoptr(GPtrArray) reviews = NULL;
-
-       /* create the GET data *with* the machine hash so we can later
-        * review the application ourselves */
-       uri = g_strdup_printf ("%s/moderate/%s",
-                              plugin->priv->review_server,
-                              user_hash);
-       msg = soup_message_new (SOUP_METHOD_GET, uri);
-       status_code = soup_session_send_message (session, msg);
-       if (status_code != SOUP_STATUS_OK) {
-               if (!xdg_app_review_parse_success (msg->response_body->data,
-                                                  msg->response_body->length,
-                                                  error))
-                       return NULL;
-               /* not sure what to do here */
-               g_set_error_literal (error,
-                                    GS_PLUGIN_ERROR,
-                                    GS_PLUGIN_ERROR_FAILED,
-                                    "status code invalid");
-               return NULL;
-       }
-       g_debug ("xdg-app-review returned: %s", msg->response_body->data);
-       return xdg_app_review_parse_reviews (msg->response_body->data,
-                                            msg->response_body->length,
-                                            error);
-}
-#endif
-
 /**
  * gs_plugin_xdg_app_reviews_json_post:
  */
@@ -995,26 +954,57 @@ gs_plugin_add_unvoted_reviews (GsPlugin *plugin,
                               GCancellable *cancellable,
                               GError **error)
 {
-       g_autoptr(GsReview) review = NULL;
-       g_autoptr(GDateTime) dt = NULL;
-
-       g_autoptr(GsApp) app = gs_app_new ("org.gnome.Software.desktop");
-       gs_app_set_name (app, GS_APP_QUALITY_NORMAL, "Power Manager");
-       gs_app_set_summary (app, GS_APP_QUALITY_NORMAL, "Power Management Program");
-       gs_app_set_state (app, AS_APP_STATE_AVAILABLE);
-       gs_app_set_kind (app, GS_APP_KIND_NORMAL);
-
-       /* set first review */
-       review = gs_review_new ();
-       gs_review_set_rating (review, 50);
-       gs_review_set_reviewer (review, "Angela Avery");
-       gs_review_set_summary (review, "Steep learning curve, but worth it");
-       gs_review_set_text (review, "Best overall 3D application I've ever used overall 3D application I've 
ever used. Best overall 3D application I've ever used overall 3D application I've ever used. Best overall 3D 
application I've ever used overall 3D application I've ever used. Best overall 3D application I've ever used 
overall 3D application I've ever used.");
-       gs_review_set_version (review, "3.16.4");
-       dt = g_date_time_new_now_utc ();
-       gs_review_set_date (review, dt);
-       gs_app_add_review (app, review);
-
-       gs_plugin_add_app (list, app);
+       const gchar *app_id_last = NULL;
+       guint status_code;
+       guint i;
+       g_autofree gchar *uri = NULL;
+       g_autoptr(GFile) cachefn_file = NULL;
+       g_autoptr(GPtrArray) reviews = NULL;
+       g_autoptr(GsApp) app_current = NULL;
+       g_autoptr(SoupMessage) msg = NULL;
+
+       /* create the GET data *with* the machine hash so we can later
+        * review the application ourselves */
+       uri = g_strdup_printf ("%s/moderate/%s",
+                              plugin->priv->review_server,
+                              plugin->priv->user_hash);
+       msg = soup_message_new (SOUP_METHOD_GET, uri);
+       status_code = soup_session_send_message (plugin->priv->session, msg);
+       if (status_code != SOUP_STATUS_OK) {
+               if (!xdg_app_review_parse_success (msg->response_body->data,
+                                                  msg->response_body->length,
+                                                  error))
+                       return FALSE;
+               /* not sure what to do here */
+               g_set_error_literal (error,
+                                    GS_PLUGIN_ERROR,
+                                    GS_PLUGIN_ERROR_FAILED,
+                                    "status code invalid");
+               return FALSE;
+       }
+       g_debug ("xdg-app-review returned: %s", msg->response_body->data);
+       reviews = xdg_app_review_parse_reviews (msg->response_body->data,
+                                               msg->response_body->length,
+                                               error);
+       if (reviews == NULL)
+               return FALSE;
+
+       /* look at all the reviews; faking application objects */
+       for (i = 0; i < reviews->len; i++) {
+               GsReview *review;
+               const gchar *app_id;
+
+               /* same app? */
+               review = g_ptr_array_index (reviews, i);
+               app_id = gs_review_get_metadata_item (review, "app_id");
+               if (g_strcmp0 (app_id, app_id_last) != 0) {
+                       g_clear_object (&app_current);
+                       app_current = gs_app_new (app_id);
+                       gs_plugin_add_app (list, app_current);
+                       app_id_last = app_id;
+               }
+               gs_app_add_review (app_current, review);
+       }
+
        return TRUE;
 }


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