[gnome-software/wip/rancell/reviews: 19/33] Only show reviews widgets if a plugin supports it



commit 2c15041ca8c082520b07d7d79aec76eb91627538
Author: Robert Ancell <robert ancell canonical com>
Date:   Fri Jan 15 13:42:59 2016 +1300

    Only show reviews widgets if a plugin supports it

 src/gs-plugin-loader.c                 |   21 ++++++++++++++++++++-
 src/gs-plugin-loader.h                 |    1 +
 src/gs-plugin.h                        |    7 +++++++
 src/gs-shell-details.c                 |   10 ++++++++++
 src/gs-shell-details.ui                |    1 -
 src/plugins/gs-plugin-ubuntu-reviews.c |    6 ++++++
 6 files changed, 44 insertions(+), 2 deletions(-)
---
diff --git a/src/gs-plugin-loader.c b/src/gs-plugin-loader.c
index 999b4a9..195a64b 100644
--- a/src/gs-plugin-loader.c
+++ b/src/gs-plugin-loader.c
@@ -51,6 +51,7 @@ typedef struct
        guint                    updates_changed_id;
        gboolean                 online; 
 
+       gboolean                 supports_reviews;
        gchar                   **review_auths;
 } GsPluginLoaderPrivate;
 
@@ -2838,6 +2839,7 @@ gs_plugin_loader_open_plugin (GsPluginLoader *plugin_loader,
        GModule *module;
        GsPluginGetNameFunc plugin_name = NULL;
        GsPluginGetDepsFunc plugin_deps = NULL;
+       GsPluginGetSupportsReviewsFunc plugin_supports_reviews = NULL;
        GsPluginGetReviewAuthFunc plugin_review_auth = NULL;
        const gchar *review_auth;
        GsPlugin *plugin = NULL;
@@ -2864,7 +2866,14 @@ gs_plugin_loader_open_plugin (GsPluginLoader *plugin_loader,
                                "gs_plugin_get_deps",
                                (gpointer *) &plugin_deps);
 
-       /* Check if this module requires any authorization for reviews */
+       /* Check if this plugin can do reviews */
+       (void) g_module_symbol (module,
+                               "gs_plugin_get_supports_reviews",
+                               (gpointer *) &plugin_supports_reviews);
+       if (plugin_supports_reviews && plugin_supports_reviews (plugin))
+               priv->supports_reviews = TRUE;
+
+       /* Check if this plugin requires any authorization for reviews */
        (void) g_module_symbol (module,
                                "gs_plugin_get_review_auth",
                                (gpointer *) &plugin_review_auth);
@@ -3720,6 +3729,16 @@ gs_plugin_loader_offline_update_finish (GsPluginLoader *plugin_loader,
 }
 
 /**
+ * gs_plugin_loader_get_supports_reviews:
+ */
+gboolean
+gs_plugin_loader_get_supports_reviews (GsPluginLoader *plugin_loader)
+{
+       GsPluginLoaderPrivate *priv = gs_plugin_loader_get_instance_private (plugin_loader);
+       return priv->supports_reviews;
+}
+
+/**
  * gs_plugin_loader_get_review_auths:
  */
 gchar **
diff --git a/src/gs-plugin-loader.h b/src/gs-plugin-loader.h
index 7f16eb9..56458ab 100644
--- a/src/gs-plugin-loader.h
+++ b/src/gs-plugin-loader.h
@@ -224,6 +224,7 @@ GsApp               *gs_plugin_loader_dedupe                (GsPluginLoader 
*plugin_loader,
                                                         GsApp          *app);
 void            gs_plugin_loader_set_network_status    (GsPluginLoader *plugin_loader,
                                                         gboolean        online);
+gboolean        gs_plugin_loader_get_supports_reviews  (GsPluginLoader *plugin_loader);
 gchar          **gs_plugin_loader_get_review_auths     (GsPluginLoader *plugin_loader);
 
 G_END_DECLS
diff --git a/src/gs-plugin.h b/src/gs-plugin.h
index cb4decd..ea3584f 100644
--- a/src/gs-plugin.h
+++ b/src/gs-plugin.h
@@ -123,6 +123,7 @@ typedef enum {
 
 typedef const gchar    *(*GsPluginGetNameFunc)         (void);
 typedef const gchar    **(*GsPluginGetDepsFunc)        (GsPlugin       *plugin);
+typedef gboolean       *(*GsPluginGetSupportsReviewsFunc)      (GsPlugin       *plugin);
 typedef const gchar    *(*GsPluginGetReviewAuthFunc)   (GsPlugin       *plugin);
 typedef void            (*GsPluginFunc)                (GsPlugin       *plugin);
 typedef gboolean        (*GsPluginSearchFunc)          (GsPlugin       *plugin,
@@ -277,6 +278,12 @@ gboolean    gs_plugin_app_upgrade_download         (GsPlugin       *plugin,
                                                         GsApp          *app,
                                                         GCancellable   *cancellable,
                                                         GError         **error);
+gboolean        gs_plugin_get_supports_review          (GsPlugin       *plugin);
+const gchar    *gs_plugin_get_review_auth              (GsPlugin       *plugin);
+gboolean        gs_plugin_app_set_review               (GsPlugin       *plugin,
+                                                        GsApp          *app,
+                                                        GCancellable   *cancellable,
+                                                        GError         **error);
 gboolean        gs_plugin_refresh                      (GsPlugin       *plugin,
                                                         guint           cache_age,
                                                         GsPluginRefreshFlags flags,
diff --git a/src/gs-shell-details.c b/src/gs-shell-details.c
index 1eb5acc..5ecc0ad 100644
--- a/src/gs-shell-details.c
+++ b/src/gs-shell-details.c
@@ -91,6 +91,7 @@ struct _GsShellDetails
        GtkWidget               *label_details_tag_webapp;
        GtkWidget               *label_details_info_text;
        GtkWidget               *list_box_addons;
+       GtkWidget               *box_reviews;
        GtkWidget               *list_box_reviews;
        GtkWidget               *scrolledwindow_details;
        GtkWidget               *spinner_details;
@@ -956,6 +957,9 @@ gs_shell_details_refresh_reviews (GsShellDetails *self)
        GPtrArray *reviews;
        guint i;
 
+       if (!gs_plugin_loader_get_supports_reviews (self->plugin_loader))
+               return;
+
        gs_container_remove_all (GTK_CONTAINER (self->list_box_reviews));
 
        reviews = gs_app_get_reviews (self->app);
@@ -1347,6 +1351,7 @@ gs_shell_details_rating_changed_cb (GsStarWidget *star,
        gs_app_review_dialog_set_rating (GS_APP_REVIEW_DIALOG (dialog), rating);
 
        review_auths = gs_plugin_loader_get_review_auths (self->plugin_loader);
+       // FIXME: Use these
 
        gtk_window_set_transient_for (GTK_WINDOW (dialog), gs_shell_get_window (self->shell));
        response = gtk_dialog_run (GTK_DIALOG (dialog));
@@ -1422,6 +1427,10 @@ gs_shell_details_setup (GsShellDetails *self,
        self->builder = g_object_ref (builder);
        self->cancellable = g_object_ref (cancellable);
 
+       /* Show review widgets if we have plugins that provide them */
+       if (gs_plugin_loader_get_supports_reviews (plugin_loader))
+               gtk_widget_set_visible (self->box_reviews, TRUE);
+
        /* set up star ratings */
        self->star = gs_star_widget_new ();
        g_signal_connect (self->star, "rating-changed",
@@ -1531,6 +1540,7 @@ gs_shell_details_class_init (GsShellDetailsClass *klass)
        gtk_widget_class_bind_template_child (widget_class, GsShellDetails, label_details_tag_webapp);
        gtk_widget_class_bind_template_child (widget_class, GsShellDetails, label_details_info_text);
        gtk_widget_class_bind_template_child (widget_class, GsShellDetails, list_box_addons);
+       gtk_widget_class_bind_template_child (widget_class, GsShellDetails, box_reviews);
        gtk_widget_class_bind_template_child (widget_class, GsShellDetails, list_box_reviews);
        gtk_widget_class_bind_template_child (widget_class, GsShellDetails, scrolledwindow_details);
        gtk_widget_class_bind_template_child (widget_class, GsShellDetails, spinner_details);
diff --git a/src/gs-shell-details.ui b/src/gs-shell-details.ui
index 0670c5f..a5f8121 100644
--- a/src/gs-shell-details.ui
+++ b/src/gs-shell-details.ui
@@ -1126,7 +1126,6 @@
                     </child>
                     <child>
                       <object class="GtkBox" id="box_reviews">
-                        <property name="visible">True</property>
                         <property name="orientation">vertical</property>
                         <property name="margin_top">28</property>
                         <child>
diff --git a/src/plugins/gs-plugin-ubuntu-reviews.c b/src/plugins/gs-plugin-ubuntu-reviews.c
index cd3c5ce..4554201 100644
--- a/src/plugins/gs-plugin-ubuntu-reviews.c
+++ b/src/plugins/gs-plugin-ubuntu-reviews.c
@@ -299,6 +299,12 @@ set_request (SoupMessage *message, JsonBuilder *builder)
        g_object_unref (generator);
 }
 
+gboolean
+gs_plugin_get_supports_reviews (GsPlugin *plugin)
+{
+       return TRUE;
+}
+
 const gchar *
 gs_plugin_get_review_auth (GsPlugin *plugin)
 {


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