[gnome-software: 1/14] gs-app-query: Add a category property
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-software: 1/14] gs-app-query: Add a category property
- Date: Mon, 9 May 2022 13:34:15 +0000 (UTC)
commit 8c407ffe71ecaa3b31af261e70b1e6760e3e1e7a
Author: Philip Withnall <pwithnall endlessos org>
Date: Wed May 4 13:52:05 2022 +0100
gs-app-query: Add a category property
This allows querying for apps which are in a specific category.
This query property will eventually replace the `GET_CATEGORY_APPS`
action / `gs_plugin_add_category_apps()` vfunc.
Signed-off-by: Philip Withnall <pwithnall endlessos org>
Helps: #1472
lib/gs-app-query.c | 48 +++++++++++++++++++++++++++++++++++++++++++++++-
lib/gs-app-query.h | 2 ++
2 files changed, 49 insertions(+), 1 deletion(-)
---
diff --git a/lib/gs-app-query.c b/lib/gs-app-query.c
index 5670ee5a0..f25b20d11 100644
--- a/lib/gs-app-query.c
+++ b/lib/gs-app-query.c
@@ -74,6 +74,7 @@ struct _GsAppQuery
gchar **provides_files; /* (owned) (nullable) (array zero-terminated=1) */
GDateTime *released_since; /* (owned) (nullable) */
GsAppQueryTristate is_curated;
+ GsCategory *category; /* (nullable) (owned) */
};
G_DEFINE_TYPE (GsAppQuery, gs_app_query, G_TYPE_OBJECT)
@@ -91,9 +92,10 @@ typedef enum {
PROP_PROVIDES_FILES,
PROP_RELEASED_SINCE,
PROP_IS_CURATED,
+ PROP_CATEGORY,
} GsAppQueryProperty;
-static GParamSpec *props[PROP_IS_CURATED + 1] = { NULL, };
+static GParamSpec *props[PROP_CATEGORY + 1] = { NULL, };
static void
gs_app_query_get_property (GObject *object,
@@ -140,6 +142,9 @@ gs_app_query_get_property (GObject *object,
case PROP_IS_CURATED:
g_value_set_enum (value, self->is_curated);
break;
+ case PROP_CATEGORY:
+ g_value_set_object (value, self->category);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -220,6 +225,11 @@ gs_app_query_set_property (GObject *object,
g_assert (self->is_curated == GS_APP_QUERY_TRISTATE_UNSET);
self->is_curated = g_value_get_enum (value);
break;
+ case PROP_CATEGORY:
+ /* Construct only. */
+ g_assert (self->category == NULL);
+ self->category = g_value_dup_object (value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -241,6 +251,8 @@ gs_app_query_dispose (GObject *object)
self->filter_user_data_notify = NULL;
}
+ g_clear_object (&self->category);
+
G_OBJECT_CLASS (gs_app_query_parent_class)->dispose (object);
}
@@ -462,6 +474,22 @@ gs_app_query_class_init (GsAppQueryClass *klass)
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY);
+ /**
+ * GsAppQuery:category: (nullable)
+ *
+ * A category which apps must be in.
+ *
+ * If this is %NULL, apps are not filtered by category.
+ *
+ * Since: 43
+ */
+ props[PROP_CATEGORY] =
+ g_param_spec_object ("category", "Category",
+ "A category which apps must be in.",
+ GS_TYPE_CATEGORY,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY);
+
g_object_class_install_properties (object_class, G_N_ELEMENTS (props), props);
}
@@ -651,3 +679,21 @@ gs_app_query_get_is_curated (GsAppQuery *self)
return self->is_curated;
}
+
+/**
+ * gs_app_query_get_category:
+ * @self: a #GsAppQuery
+ *
+ * Get the value of #GsAppQuery:category.
+ *
+ * Returns: (nullable) (transfer none): a category which apps must be part of,
+ * or %NULL to not filter on category
+ * Since: 43
+ */
+GsCategory *
+gs_app_query_get_category (GsAppQuery *self)
+{
+ g_return_val_if_fail (GS_IS_APP_QUERY (self), NULL);
+
+ return self->category;
+}
diff --git a/lib/gs-app-query.h b/lib/gs-app-query.h
index 56f6dcbf5..d6c099dec 100644
--- a/lib/gs-app-query.h
+++ b/lib/gs-app-query.h
@@ -15,6 +15,7 @@
#include <gio/gio.h>
#include "gs-app-list.h"
+#include "gs-category.h"
#include "gs-plugin-types.h"
G_BEGIN_DECLS
@@ -58,5 +59,6 @@ GsAppListFilterFunc gs_app_query_get_filter_func (GsAppQuery *self,
const gchar * const *gs_app_query_get_provides_files (GsAppQuery *self);
GDateTime *gs_app_query_get_released_since (GsAppQuery *self);
GsAppQueryTristate gs_app_query_get_is_curated (GsAppQuery *self);
+GsCategory *gs_app_query_get_category (GsAppQuery *self);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]