static gboolean gs_plugin_odrs_refine_ratings (GsPlugin *plugin, GsApp *app, GCancellable *cancellable, GError **error) { GsPluginData *priv = gs_plugin_get_data (plugin); GArray *review_ratings; gint rating; g_autoptr(AsProfileTask) ptask = NULL; /* profile */ ptask = as_profile_start_literal (gs_plugin_get_profile (plugin), "odrs::refine-ratings"); g_assert (ptask != NULL); /* get ratings */ review_ratings = g_hash_table_lookup (priv->ratings, gs_app_get_id (app)); if (review_ratings == NULL) return TRUE; gs_app_set_review_ratings (app, review_ratings); /* find the wilson rating */ rating = gs_utils_get_wilson_rating (g_array_index (review_ratings, guint32, 1), g_array_index (review_ratings, guint32, 2), g_array_index (review_ratings, guint32, 3), g_array_index (review_ratings, guint32, 4), g_array_index (review_ratings, guint32, 5)); if (rating > 0) gs_app_set_rating (app, rating); return TRUE; }
static gboolean get_review_stats (GsPlugin *plugin, const gchar *package_name, gint *rating, gint *review_ratings, GError **error) { GsPluginData *priv = gs_plugin_get_data (plugin); Histogram histogram = { 0, 0, 0, 0, 0 }; gchar *error_msg = NULL; gint result; g_autofree gchar *statement = NULL; /* Get histogram from the database */ statement = g_strdup_printf ("SELECT one_star_count, two_star_count, three_star_count, four_star_count, five_star_count FROM review_stats " "WHERE package_name = '%s'", package_name); result = sqlite3_exec (priv->db, statement, get_review_stats_sqlite_cb, &histogram, &error_msg); if (result != SQLITE_OK) { g_set_error (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_FAILED, "SQL error: %s", error_msg); sqlite3_free (error_msg); return FALSE; } *rating = gs_utils_get_wilson_rating (histogram.one_star_count, histogram.two_star_count, histogram.three_star_count, histogram.four_star_count, histogram.five_star_count); review_ratings[0] = 0; review_ratings[1] = (gint) histogram.one_star_count; review_ratings[2] = (gint) histogram.two_star_count; review_ratings[3] = (gint) histogram.three_star_count; review_ratings[4] = (gint) histogram.four_star_count; review_ratings[5] = (gint) histogram.five_star_count; return TRUE; }