gboolean gs_plugin_review_submit (GsPlugin *plugin, GsApp *app, AsReview *review, GCancellable *cancellable, GError **error) { GsPluginData *priv = gs_plugin_get_data (plugin); g_autofree gchar *data = NULL; g_autofree gchar *uri = NULL; g_autofree gchar *version = NULL; g_autoptr(JsonBuilder) builder = NULL; g_autoptr(JsonGenerator) json_generator = NULL; g_autoptr(JsonNode) json_root = NULL; /* save as we don't re-request the review from the server */ as_review_set_reviewer_name (review, g_get_real_name ()); as_review_add_metadata (review, "app_id", gs_app_get_id (app)); as_review_add_metadata (review, "user_skey", gs_app_get_metadata_item (app, "ODRS::user_skey")); /* create object with review data */ builder = json_builder_new (); json_builder_begin_object (builder); json_builder_set_member_name (builder, "user_hash"); json_builder_add_string_value (builder, priv->user_hash); json_builder_set_member_name (builder, "user_skey"); json_builder_add_string_value (builder, as_review_get_metadata_item (review, "user_skey")); json_builder_set_member_name (builder, "app_id"); json_builder_add_string_value (builder, as_review_get_metadata_item (review, "app_id")); json_builder_set_member_name (builder, "locale"); json_builder_add_string_value (builder, gs_plugin_get_locale (plugin)); json_builder_set_member_name (builder, "distro"); json_builder_add_string_value (builder, priv->distro); json_builder_set_member_name (builder, "version"); version = gs_plugin_odrs_sanitize_version (as_review_get_version (review)); json_builder_add_string_value (builder, version); json_builder_set_member_name (builder, "user_display"); json_builder_add_string_value (builder, as_review_get_reviewer_name (review)); json_builder_set_member_name (builder, "summary"); json_builder_add_string_value (builder, as_review_get_summary (review)); json_builder_set_member_name (builder, "description"); json_builder_add_string_value (builder, as_review_get_description (review)); json_builder_set_member_name (builder, "rating"); json_builder_add_int_value (builder, as_review_get_rating (review)); json_builder_end_object (builder); /* export as a string */ json_root = json_builder_get_root (builder); json_generator = json_generator_new (); json_generator_set_pretty (json_generator, TRUE); json_generator_set_root (json_generator, json_root); data = json_generator_to_data (json_generator, NULL); /* clear cache */ if (!gs_plugin_odrs_invalidate_cache (review, error)) return FALSE; /* POST */ uri = g_strdup_printf ("%s/submit", priv->review_server); return gs_plugin_odrs_json_post (gs_plugin_get_soup_session (plugin), uri, data, error); }
static void gs_review_row_refresh (GsReviewRow *row) { GsReviewRowPrivate *priv = gs_review_row_get_instance_private (row); const gchar *reviewer; GDateTime *date; g_autofree gchar *text = NULL; gs_star_widget_set_rating (GS_STAR_WIDGET (priv->stars), as_review_get_rating (priv->review)); reviewer = as_review_get_reviewer_name (priv->review); if (reviewer == NULL) { /* TRANSLATORS: this is when a user doesn't specify a name */ reviewer = _("Unknown"); } gtk_label_set_text (GTK_LABEL (priv->author_label), reviewer); date = as_review_get_date (priv->review); if (date != NULL) text = g_date_time_format (date, "%e %B %Y"); else text = g_strdup (""); gtk_label_set_text (GTK_LABEL (priv->date_label), text); gtk_label_set_text (GTK_LABEL (priv->summary_label), as_review_get_summary (priv->review)); gtk_label_set_text (GTK_LABEL (priv->text_label), as_review_get_description (priv->review)); /* if we voted, we can't do any actions */ if (as_review_get_flags (priv->review) & AS_REVIEW_FLAG_VOTED) priv->actions = 0; /* set actions up */ if ((priv->actions & (1 << GS_PLUGIN_ACTION_REVIEW_UPVOTE | 1 << GS_PLUGIN_ACTION_REVIEW_DOWNVOTE | 1 << GS_PLUGIN_ACTION_REVIEW_DISMISS)) == 0) { gtk_widget_set_visible (priv->box_voting, FALSE); } else { gtk_widget_set_visible (priv->box_voting, TRUE); gtk_widget_set_visible (priv->button_yes, priv->actions & 1 << GS_PLUGIN_ACTION_REVIEW_UPVOTE); gtk_widget_set_visible (priv->button_no, priv->actions & 1 << GS_PLUGIN_ACTION_REVIEW_DOWNVOTE); gtk_widget_set_visible (priv->button_dismiss, priv->actions & 1 << GS_PLUGIN_ACTION_REVIEW_DISMISS); } gtk_widget_set_visible (priv->button_remove, priv->actions & 1 << GS_PLUGIN_ACTION_REVIEW_REMOVE); gtk_widget_set_visible (priv->button_report, priv->actions & 1 << GS_PLUGIN_ACTION_REVIEW_REPORT); /* mark insensitive if no network */ if (priv->network_available) { gtk_widget_set_sensitive (priv->button_yes, TRUE); gtk_widget_set_sensitive (priv->button_no, TRUE); gtk_widget_set_sensitive (priv->button_remove, TRUE); gtk_widget_set_sensitive (priv->button_report, TRUE); } else { gtk_widget_set_sensitive (priv->button_yes, FALSE); gtk_widget_set_sensitive (priv->button_no, FALSE); gtk_widget_set_sensitive (priv->button_remove, FALSE); gtk_widget_set_sensitive (priv->button_report, FALSE); } }