[gnome-software: 1/14] gs-app-query: Add a category property




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]