[gnome-software] trivial: Allow reviews to have flags added
- From: Richard Hughes <rhughes src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-software] trivial: Allow reviews to have flags added
- Date: Wed, 10 Feb 2016 16:38:54 +0000 (UTC)
commit 6f7d1f1760ec0d45b580cd10ede3f85a3cb65838
Author: Richard Hughes <richard hughsie com>
Date: Wed Feb 10 16:36:09 2016 +0000
trivial: Allow reviews to have flags added
In retrospect, 'state' was a bad name for this.
src/gs-review-row.c | 2 +-
src/gs-review.c | 48 +++++++++------
src/gs-review.h | 18 +++---
src/gs-shell-details.c | 17 +-----
src/gs-utils.c | 2 +-
src/plugins/gs-plugin-dummy.c | 8 +-
src/plugins/gs-plugin-xdg-app-reviews.c | 106 +++++++++++++++++++------------
7 files changed, 112 insertions(+), 89 deletions(-)
---
diff --git a/src/gs-review-row.c b/src/gs-review-row.c
index 1143f6f..0e32275 100644
--- a/src/gs-review-row.c
+++ b/src/gs-review-row.c
@@ -78,7 +78,7 @@ gs_review_row_refresh (GsReviewRow *row)
gs_review_get_text (priv->review));
/* if we voted, we can't do any actions */
- if (gs_review_get_state (priv->review) & GS_REVIEW_STATE_VOTED)
+ if (gs_review_get_flags (priv->review) & GS_REVIEW_FLAG_VOTED)
priv->actions = 0;
/* set actions up */
diff --git a/src/gs-review.c b/src/gs-review.c
index 14a4a50..f4d4323 100644
--- a/src/gs-review.c
+++ b/src/gs-review.c
@@ -27,7 +27,7 @@ struct _GsReview
{
GObject parent_instance;
- GsReviewState state;
+ GsReviewFlags flags;
gchar *summary;
gchar *text;
gint karma;
@@ -48,7 +48,7 @@ enum {
PROP_VERSION,
PROP_REVIEWER,
PROP_DATE,
- PROP_STATE,
+ PROP_FLAGS,
PROP_LAST
};
@@ -160,23 +160,33 @@ gs_review_set_rating (GsReview *review, gint rating)
}
/**
- * gs_review_get_state:
+ * gs_review_get_flags:
*/
-GsReviewState
-gs_review_get_state (GsReview *review)
+GsReviewFlags
+gs_review_get_flags (GsReview *review)
{
g_return_val_if_fail (GS_IS_REVIEW (review), 0);
- return review->state;
+ return review->flags;
}
/**
- * gs_review_set_state:
+ * gs_review_set_flags:
*/
void
-gs_review_set_state (GsReview *review, GsReviewState state)
+gs_review_set_flags (GsReview *review, GsReviewFlags flags)
{
g_return_if_fail (GS_IS_REVIEW (review));
- review->state = state;
+ review->flags = flags;
+}
+
+/**
+ * gs_review_add_flags:
+ */
+void
+gs_review_add_flags (GsReview *review, GsReviewFlags flags)
+{
+ g_return_if_fail (GS_IS_REVIEW (review));
+ review->flags |= flags;
}
/**
@@ -282,8 +292,8 @@ gs_review_get_property (GObject *object, guint prop_id,
case PROP_RATING:
g_value_set_int (value, review->rating);
break;
- case PROP_STATE:
- g_value_set_uint64 (value, review->state);
+ case PROP_FLAGS:
+ g_value_set_uint64 (value, review->flags);
break;
case PROP_VERSION:
g_value_set_string (value, review->version);
@@ -319,8 +329,8 @@ gs_review_set_property (GObject *object, guint prop_id,
case PROP_RATING:
gs_review_set_rating (review, g_value_get_int (value));
break;
- case PROP_STATE:
- gs_review_set_state (review, g_value_get_uint64 (value));
+ case PROP_FLAGS:
+ gs_review_set_flags (review, g_value_get_uint64 (value));
break;
case PROP_VERSION:
gs_review_set_version (review, g_value_get_string (value));
@@ -403,14 +413,14 @@ gs_review_class_init (GsReviewClass *klass)
g_object_class_install_property (object_class, PROP_RATING, pspec);
/**
- * GsApp:state:
+ * GsApp:flags:
*/
- pspec = g_param_spec_uint64 ("state", NULL, NULL,
- GS_REVIEW_STATE_NONE,
- GS_REVIEW_STATE_LAST,
- GS_REVIEW_STATE_NONE,
+ pspec = g_param_spec_uint64 ("flags", NULL, NULL,
+ GS_REVIEW_FLAG_NONE,
+ GS_REVIEW_FLAG_LAST,
+ GS_REVIEW_FLAG_NONE,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT);
- g_object_class_install_property (object_class, PROP_STATE, pspec);
+ g_object_class_install_property (object_class, PROP_FLAGS, pspec);
/**
* GsApp:version:
diff --git a/src/gs-review.h b/src/gs-review.h
index 73662d0..2d2edd2 100644
--- a/src/gs-review.h
+++ b/src/gs-review.h
@@ -40,11 +40,11 @@ typedef enum {
} GsReviewAction;
typedef enum {
- GS_REVIEW_STATE_NONE = 0,
- GS_REVIEW_STATE_SELF = 1 << 0, /* user wrote the review themselves */
- GS_REVIEW_STATE_VOTED = 1 << 1, /* user voted on the review */
- GS_REVIEW_STATE_LAST
-} GsReviewState;
+ GS_REVIEW_FLAG_NONE = 0,
+ GS_REVIEW_FLAG_SELF = 1 << 0, /* user wrote the review themselves */
+ GS_REVIEW_FLAG_VOTED = 1 << 1, /* user voted on the review */
+ GS_REVIEW_FLAG_LAST
+} GsReviewFlags;
GsReview *gs_review_new (void);
@@ -80,9 +80,11 @@ GDateTime *gs_review_get_date (GsReview *review);
void gs_review_set_date (GsReview *review,
GDateTime *date);
-GsReviewState gs_review_get_state (GsReview *review);
-void gs_review_set_state (GsReview *review,
- GsReviewState state);
+GsReviewFlags gs_review_get_flags (GsReview *review);
+void gs_review_set_flags (GsReview *review,
+ GsReviewFlags state);
+void gs_review_add_flags (GsReview *review,
+ GsReviewFlags state);
const gchar *gs_review_get_metadata_item (GsReview *review,
const gchar *key);
diff --git a/src/gs-shell-details.c b/src/gs-shell-details.c
index f8e95a4..d47eb2d 100644
--- a/src/gs-shell-details.c
+++ b/src/gs-shell-details.c
@@ -1058,7 +1058,7 @@ gs_shell_details_refresh_reviews (GsShellDetails *self)
g_signal_connect (row, "button-clicked",
G_CALLBACK (gs_shell_details_review_button_clicked_cb), self);
- if (gs_review_get_state (review) & GS_REVIEW_STATE_SELF) {
+ if (gs_review_get_flags (review) & GS_REVIEW_FLAG_SELF) {
actions = possible_actions & 1 << GS_REVIEW_ACTION_REMOVE;
show_review_button = FALSE;
} else {
@@ -1416,17 +1416,6 @@ gs_shell_details_app_set_ratings_cb (GObject *source,
}
/**
- * gs_shell_details_sanitize_version:
- */
-static gchar *
-gs_shell_details_sanitize_version (const gchar *version)
-{
- gchar *tmp = g_strdup (version);
- g_strdelimit (tmp, "-", '\0');
- return tmp;
-}
-
-/**
* gs_shell_details_write_review_cb:
**/
static void
@@ -1444,15 +1433,13 @@ gs_shell_details_write_review_cb (GtkButton *button,
g_autoptr(GsReview) review = NULL;
g_autoptr(GDateTime) now = NULL;
g_autofree gchar *text = NULL;
- g_autofree gchar *version = NULL;
review = gs_review_new ();
gs_review_set_summary (review, gs_review_dialog_get_summary (GS_REVIEW_DIALOG (dialog)));
text = gs_review_dialog_get_text (GS_REVIEW_DIALOG (dialog));
gs_review_set_text (review, text);
gs_review_set_rating (review, gs_review_dialog_get_rating (GS_REVIEW_DIALOG (dialog)));
- version = gs_shell_details_sanitize_version (gs_app_get_version (self->app));
- gs_review_set_version (review, version);
+ gs_review_set_version (review, gs_app_get_version (self->app));
now = g_date_time_new_now_local ();
gs_review_set_date (review, now);
diff --git a/src/gs-utils.c b/src/gs-utils.c
index 5709f9f..9b2e7e7 100644
--- a/src/gs-utils.c
+++ b/src/gs-utils.c
@@ -496,7 +496,7 @@ gs_utils_get_user_hash (GError **error)
if (!g_file_get_contents ("/etc/machine-id", &data, NULL, error))
return NULL;
- salted = g_strdup_printf ("gnome-software[%s:%s]",
+ salted = g_strdup_printf ("XXXYYgnome-software[%s:%s]",
g_get_user_name (), data);
return g_compute_checksum_for_string (G_CHECKSUM_SHA1, salted, -1);
}
diff --git a/src/plugins/gs-plugin-dummy.c b/src/plugins/gs-plugin-dummy.c
index 00324d8..b22a206 100644
--- a/src/plugins/gs-plugin-dummy.c
+++ b/src/plugins/gs-plugin-dummy.c
@@ -189,7 +189,7 @@ gs_plugin_refine (GsPlugin *plugin,
gs_review_set_text (review2, "I'm not very wordy myself.");
gs_review_set_version (review2, "3.16.3");
gs_review_set_date (review2, dt);
- gs_review_set_state (review2, GS_REVIEW_STATE_SELF);
+ gs_review_set_flags (review2, GS_REVIEW_FLAG_SELF);
gs_app_add_review (app, review2);
}
}
@@ -283,7 +283,7 @@ gs_plugin_review_report (GsPlugin *plugin,
GError **error)
{
g_debug ("Reporting dummy review");
- gs_review_set_state (review, GS_REVIEW_STATE_VOTED);
+ gs_review_add_flags (review, GS_REVIEW_FLAG_VOTED);
return TRUE;
}
@@ -298,7 +298,7 @@ gs_plugin_review_upvote (GsPlugin *plugin,
GError **error)
{
g_debug ("Upvoting dummy review");
- gs_review_set_state (review, GS_REVIEW_STATE_VOTED);
+ gs_review_add_flags (review, GS_REVIEW_FLAG_VOTED);
return TRUE;
}
@@ -313,7 +313,7 @@ gs_plugin_review_downvote (GsPlugin *plugin,
GError **error)
{
g_debug ("Downvoting dummy review");
- gs_review_set_state (review, GS_REVIEW_STATE_VOTED);
+ gs_review_add_flags (review, GS_REVIEW_FLAG_VOTED);
return TRUE;
}
diff --git a/src/plugins/gs-plugin-xdg-app-reviews.c b/src/plugins/gs-plugin-xdg-app-reviews.c
index 8d2ea1c..636c7f7 100644
--- a/src/plugins/gs-plugin-xdg-app-reviews.c
+++ b/src/plugins/gs-plugin-xdg-app-reviews.c
@@ -140,25 +140,29 @@ xdg_app_review_parse_review_object (JsonObject *item)
gs_review_set_karma (rev, json_object_get_int_member (item, "karma"));
/* add extra metadata for the plugin */
- if (json_object_has_member (item, "user_id")) {
+ if (json_object_has_member (item, "user_hash")) {
gs_review_add_metadata (rev, "user_hash",
- json_object_get_string_member (item, "user_id"));
+ json_object_get_string_member (item, "user_hash"));
}
- 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, "user_skey")) {
+ gs_review_add_metadata (rev, "user_skey",
+ json_object_get_string_member (item, "user_skey"));
}
- 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, "app_id")) {
+ gs_review_add_metadata (rev, "app_id",
+ json_object_get_string_member (item, "app_id"));
}
- 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);
+ if (json_object_has_member (item, "review_id")) {
+ g_autofree gchar *review_id = NULL;
+ review_id = g_strdup_printf ("%" G_GINT64_FORMAT,
+ json_object_get_int_member (item, "review_id"));
+ gs_review_add_metadata (rev, "review_id", review_id);
}
+ /* don't allow multiple votes */
+ if (json_object_has_member (item, "vote_id"))
+ gs_review_add_flags (rev, GS_REVIEW_FLAG_VOTED);
+
return rev;
}
@@ -587,9 +591,9 @@ xdg_app_review_fetch_for_app (GsPlugin *plugin, GsApp *app, GError **error)
/* create object with review data */
builder = json_builder_new ();
json_builder_begin_object (builder);
- json_builder_set_member_name (builder, "user_id");
+ json_builder_set_member_name (builder, "user_hash");
json_builder_add_string_value (builder, plugin->priv->user_hash);
- json_builder_set_member_name (builder, "appid");
+ json_builder_set_member_name (builder, "app_id");
json_builder_add_string_value (builder, gs_app_get_id (app));
json_builder_set_member_name (builder, "locale");
json_builder_add_string_value (builder, plugin->locale);
@@ -677,14 +681,14 @@ gs_plugin_refine_reviews (GsPlugin *plugin,
/* save this on the application object so we can use it for
* submitting a new review */
if (i == 0) {
- gs_app_set_metadata (app, "XdgAppReviews::user_key",
- gs_review_get_metadata_item (review, "user_key"));
+ gs_app_set_metadata (app, "XdgAppReviews::user_skey",
+ gs_review_get_metadata_item (review, "user_skey"));
}
- /* the user_id matches, so mark this as our own review */
+ /* the user_hash matches, so mark this as our own review */
if (g_strcmp0 (gs_review_get_metadata_item (review, "user_hash"),
plugin->priv->user_hash) == 0) {
- gs_review_set_state (review, GS_REVIEW_STATE_SELF);
+ gs_review_set_flags (review, GS_REVIEW_FLAG_SELF);
}
gs_app_add_review (app, review);
}
@@ -744,6 +748,19 @@ gs_plugin_refine (GsPlugin *plugin,
}
/**
+ * xdg_app_review_sanitize_version:
+ */
+static gchar *
+xdg_app_review_sanitize_version (const gchar *version)
+{
+ gchar *tmp = g_strdup (version);
+ if (tmp == NULL)
+ return g_strdup ("unknown");
+ g_strdelimit (tmp, "-", '\0');
+ return tmp;
+}
+
+/**
* gs_plugin_review_submit:
*/
gboolean
@@ -755,34 +772,37 @@ gs_plugin_review_submit (GsPlugin *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 */
- gs_review_add_metadata (review, "appid", gs_app_get_id (app));
- gs_review_add_metadata (review, "user_key",
- gs_app_get_metadata_item (app, "XdgAppReviews::user_key"));
+ gs_review_set_reviewer (review, g_get_real_name ());
+ gs_review_add_metadata (review, "app_id", gs_app_get_id (app));
+ gs_review_add_metadata (review, "user_skey",
+ gs_app_get_metadata_item (app, "XdgAppReviews::user_skey"));
/* create object with review data */
builder = json_builder_new ();
json_builder_begin_object (builder);
- json_builder_set_member_name (builder, "user_id");
+ json_builder_set_member_name (builder, "user_hash");
json_builder_add_string_value (builder, plugin->priv->user_hash);
- json_builder_set_member_name (builder, "user_key");
+ json_builder_set_member_name (builder, "user_skey");
json_builder_add_string_value (builder,
- gs_review_get_metadata_item (review, "user_key"));
- json_builder_set_member_name (builder, "appid");
+ gs_review_get_metadata_item (review, "user_skey"));
+ json_builder_set_member_name (builder, "app_id");
json_builder_add_string_value (builder,
- gs_review_get_metadata_item (review, "appid"));
+ gs_review_get_metadata_item (review, "app_id"));
json_builder_set_member_name (builder, "locale");
json_builder_add_string_value (builder, plugin->locale);
json_builder_set_member_name (builder, "distro");
json_builder_add_string_value (builder, plugin->priv->distro);
json_builder_set_member_name (builder, "version");
- json_builder_add_string_value (builder, gs_review_get_version (review));
+ version = xdg_app_review_sanitize_version (gs_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, g_get_real_name ());
+ json_builder_add_string_value (builder, gs_review_get_reviewer (review));
json_builder_set_member_name (builder, "summary");
json_builder_add_string_value (builder, gs_review_get_summary (review));
json_builder_set_member_name (builder, "description");
@@ -799,7 +819,7 @@ gs_plugin_review_submit (GsPlugin *plugin,
data = json_generator_to_data (json_generator, NULL);
/* POST */
- uri = g_strdup_printf ("%s/add", plugin->priv->review_server);
+ uri = g_strdup_printf ("%s/submit", plugin->priv->review_server);
return gs_plugin_xdg_app_reviews_json_post (plugin->priv->session,
uri, data, error);
}
@@ -820,7 +840,7 @@ gs_plugin_xdg_app_reviews_invalidate_cache (GsReview *review, GError **error)
return FALSE;
cachefn = g_strdup_printf ("%s/%s.json",
cachedir,
- gs_review_get_metadata_item (review, "appid"));
+ gs_review_get_metadata_item (review, "app_id"));
cachefn_file = g_file_new_for_path (cachefn);
if (!g_file_query_exists (cachefn_file, NULL))
return TRUE;
@@ -834,7 +854,7 @@ static gboolean
gs_plugin_xdg_app_reviews_vote (GsPlugin *plugin, GsReview *review,
const gchar *uri, GError **error)
{
- guint64 dbid;
+ const gchar *tmp;
g_autofree gchar *data = NULL;
g_autoptr(JsonBuilder) builder = NULL;
g_autoptr(JsonGenerator) json_generator = NULL;
@@ -844,17 +864,21 @@ gs_plugin_xdg_app_reviews_vote (GsPlugin *plugin, GsReview *review,
builder = json_builder_new ();
json_builder_begin_object (builder);
- json_builder_set_member_name (builder, "user_id");
+ json_builder_set_member_name (builder, "user_hash");
json_builder_add_string_value (builder, plugin->priv->user_hash);
- json_builder_set_member_name (builder, "user_key");
+ json_builder_set_member_name (builder, "user_skey");
json_builder_add_string_value (builder,
- gs_review_get_metadata_item (review, "user_key"));
- json_builder_set_member_name (builder, "appid");
+ gs_review_get_metadata_item (review, "user_skey"));
+ json_builder_set_member_name (builder, "app_id");
json_builder_add_string_value (builder,
- gs_review_get_metadata_item (review, "appid"));
- json_builder_set_member_name (builder, "dbid");
- dbid = g_ascii_strtoull (gs_review_get_metadata_item (review, "dbid"), NULL, 10);
- json_builder_add_int_value (builder, dbid);
+ gs_review_get_metadata_item (review, "app_id"));
+ tmp = gs_review_get_metadata_item (review, "review_id");
+ if (tmp != NULL) {
+ guint64 review_id;
+ json_builder_set_member_name (builder, "review_id");
+ review_id = g_ascii_strtoull (tmp, NULL, 10);
+ json_builder_add_int_value (builder, review_id);
+ }
json_builder_end_object (builder);
/* export as a string */
@@ -876,7 +900,7 @@ gs_plugin_xdg_app_reviews_vote (GsPlugin *plugin, GsReview *review,
return FALSE;
/* mark as voted */
- gs_review_set_state (review, GS_REVIEW_STATE_VOTED);
+ gs_review_add_flags (review, GS_REVIEW_FLAG_VOTED);
/* success */
return TRUE;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]