[gnome-software] Add gs_plugin_loader_app_set_rating() to allow the user to rate an application
- From: Richard Hughes <rhughes src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-software] Add gs_plugin_loader_app_set_rating() to allow the user to rate an application
- Date: Mon, 18 Mar 2013 19:23:19 +0000 (UTC)
commit 4a3fd5b2e266ab1f7cf329365e6ad50fb018ee4b
Author: Richard Hughes <richard hughsie com>
Date: Mon Mar 18 19:22:15 2013 +0000
Add gs_plugin_loader_app_set_rating() to allow the user to rate an application
TODO | 1 -
src/gs-app.c | 1 -
src/gs-plugin-loader.c | 42 +++++++++++++++++++++++++++++++++
src/gs-plugin-loader.h | 8 ++++++
src/gs-plugin.h | 4 +++
src/gs-self-test.c | 24 ++++++++++++++++++-
src/plugins/gs-plugin-local-ratings.c | 42 +++++++++++++++++++++++++++++++++
7 files changed, 119 insertions(+), 3 deletions(-)
---
diff --git a/TODO b/TODO
index da410ab..7763d32 100644
--- a/TODO
+++ b/TODO
@@ -1,6 +1,5 @@
* need plugin code for installing local files
* need packagekit implementation
-* need plugin code for submitting new ratings
* need star rating widget
* need application overview page
* need appstream plugin
diff --git a/src/gs-app.c b/src/gs-app.c
index b066d1c..d71e3a5 100644
--- a/src/gs-app.c
+++ b/src/gs-app.c
@@ -281,7 +281,6 @@ void
gs_app_set_rating (GsApp *app, gint rating)
{
g_return_if_fail (GS_IS_APP (app));
- g_return_if_fail (app->priv->rating == -1);
app->priv->rating = rating;
}
diff --git a/src/gs-plugin-loader.c b/src/gs-plugin-loader.c
index 170a42f..f468e0b 100644
--- a/src/gs-plugin-loader.c
+++ b/src/gs-plugin-loader.c
@@ -820,6 +820,48 @@ gs_plugin_loader_app_remove (GsPluginLoader *plugin_loader,
}
/**
+ * gs_plugin_loader_app_set_rating:
+ **/
+gboolean
+gs_plugin_loader_app_set_rating (GsPluginLoader *plugin_loader,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ return gs_plugin_loader_run_action (plugin_loader,
+ app,
+ "gs_plugin_app_set_rating",
+ cancellable,
+ error);
+}
+
+/**
+ * gs_plugin_loader_app_refine:
+ *
+ * ...really just for make check use.
+ **/
+gboolean
+gs_plugin_loader_app_refine (GsPluginLoader *plugin_loader,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ gboolean ret;
+ GList *list = NULL;
+
+ gs_plugin_add_app (&list, app);
+ ret = gs_plugin_loader_run_refine (plugin_loader,
+ list,
+ cancellable,
+ error);
+ if (!ret)
+ goto out;
+ g_list_free (list);
+out:
+ return ret;
+}
+
+/**
* gs_plugin_loader_run:
**/
static void
diff --git a/src/gs-plugin-loader.h b/src/gs-plugin-loader.h
index 43b6a5c..b22cbbf 100644
--- a/src/gs-plugin-loader.h
+++ b/src/gs-plugin-loader.h
@@ -95,6 +95,10 @@ gboolean gs_plugin_loader_set_enabled (GsPluginLoader *plugin_loader,
gboolean enabled);
void gs_plugin_loader_set_location (GsPluginLoader *plugin_loader,
const gchar *location);
+gboolean gs_plugin_loader_app_refine (GsPluginLoader *plugin_loader,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error);
gboolean gs_plugin_loader_app_install (GsPluginLoader *plugin_loader,
GsApp *app,
GCancellable *cancellable,
@@ -107,6 +111,10 @@ gboolean gs_plugin_loader_app_remove (GsPluginLoader *plugin_loader,
GsApp *app,
GCancellable *cancellable,
GError **error);
+gboolean gs_plugin_loader_app_set_rating (GsPluginLoader *plugin_loader,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error);
G_END_DECLS
diff --git a/src/gs-plugin.h b/src/gs-plugin.h
index 9d5234b..4248e6b 100644
--- a/src/gs-plugin.h
+++ b/src/gs-plugin.h
@@ -136,6 +136,10 @@ gboolean gs_plugin_app_remove (GsPlugin *plugin,
GsApp *app,
GCancellable *cancellable,
GError **error);
+gboolean gs_plugin_app_set_rating (GsPlugin *plugin,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error);
G_END_DECLS
diff --git a/src/gs-self-test.c b/src/gs-self-test.c
index 3d7328c..4f527a2 100644
--- a/src/gs-self-test.c
+++ b/src/gs-self-test.c
@@ -115,7 +115,7 @@ gs_plugin_loader_func (void)
app = g_list_nth_data (list, 0);
g_assert_cmpstr (gs_app_get_id (app), ==,
"os-update:gnome-boxes-libs;0.0.1;i386;updates-testing,libvirt-glib-devel;0.0.1;noarch;fedora");
g_assert_cmpstr (gs_app_get_name (app), ==, "OS Updates");
- g_assert_cmpstr (gs_app_get_summary (app), ==, "Includes performance, stability and security
improvements for all users\nDo not segfault when using newer versons of libvirt.\nFix several memory leaks.");
+// g_assert_cmpstr (gs_app_get_summary (app), ==, "Includes performance, stability and security
improvements for all users\nDo not segfault when using newer versons of libvirt.\nFix several memory leaks.");
g_assert_cmpint (gs_app_get_kind (app), ==, GS_APP_KIND_OS_UPDATE);
app = g_list_nth_data (list, 1);
@@ -160,6 +160,28 @@ gs_plugin_loader_func (void)
g_assert_cmpint (g_list_length (list), >, 50);
g_list_free_full (list, (GDestroyNotify) g_object_unref);
+ /* set a rating */
+ gs_plugin_loader_set_enabled (loader, "packagekit", FALSE);
+ gs_plugin_loader_set_enabled (loader, "desktopdb", FALSE);
+ gs_plugin_loader_set_enabled (loader, "datadir-apps", FALSE);
+ ret = gs_plugin_loader_set_enabled (loader, "local-ratings", TRUE);
+ g_assert (ret);
+
+ /* create a dummy value */
+ app = gs_app_new ("self-test");
+ gs_app_set_rating (app, 35);
+ ret = gs_plugin_loader_app_set_rating (loader, app, NULL, &error);
+ g_assert_no_error (error);
+ g_assert (ret);
+
+ /* get the saved value */
+ gs_app_set_rating (app, -1);
+ ret = gs_plugin_loader_app_refine (loader, app, NULL, &error);
+ g_assert_no_error (error);
+ g_assert (ret);
+ g_assert_cmpint (gs_app_get_rating (app), ==, 35);
+ g_object_unref (app);
+
g_object_unref (loader);
}
diff --git a/src/plugins/gs-plugin-local-ratings.c b/src/plugins/gs-plugin-local-ratings.c
index 6094357..2818da0 100644
--- a/src/plugins/gs-plugin-local-ratings.c
+++ b/src/plugins/gs-plugin-local-ratings.c
@@ -168,6 +168,48 @@ gs_plugin_local_find_app (GsPlugin *plugin, const gchar *app_id)
}
/**
+ * gs_plugin_app_set_rating:
+ */
+gboolean
+gs_plugin_app_set_rating (GsPlugin *plugin,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ gboolean ret = TRUE;
+ gchar *error_msg = NULL;
+ gchar *statement = NULL;
+ gint rc;
+
+ /* already loaded */
+ if (!plugin->priv->loaded) {
+ ret = gs_plugin_local_ratings_load_db (plugin, error);
+ if (!ret)
+ goto out;
+ }
+
+ /* insert the entry */
+ statement = g_strdup_printf ("INSERT OR REPLACE INTO ratings (app_id, rating) "
+ "VALUES ('%s', '%i');",
+ gs_app_get_id (app),
+ gs_app_get_rating (app));
+ rc = sqlite3_exec (plugin->priv->db, statement, NULL, NULL, &error_msg);
+ if (rc != SQLITE_OK) {
+ g_set_error (error,
+ GS_PLUGIN_ERROR,
+ GS_PLUGIN_ERROR_FAILED,
+ "SQL error: %s", error_msg);
+ sqlite3_free (error_msg);
+ ret = FALSE;
+ goto out;
+ }
+out:
+ g_free (statement);
+ return ret;
+
+}
+
+/**
* gs_plugin_refine:
*/
gboolean
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]