/* WirePlumber * * Copyright © 2020 Collabora Ltd. * @author George Kiagiadakis <george.kiagiadakis@collabora.com> * * SPDX-License-Identifier: MIT */ #ifndef __WIREPLUMBER_OBJECT_INTEREST_H__ #define __WIREPLUMBER_OBJECT_INTEREST_H__ #include <glib-object.h> #include "defs.h" #include "properties.h" G_BEGIN_DECLS /** * WpConstraintType: * @WP_CONSTRAINT_TYPE_NONE: invalid constraint type * @WP_CONSTRAINT_TYPE_PW_GLOBAL_PROPERTY: constraint applies * to a PipeWire global property of the object (the ones returned by * wp_proxy_get_global_properties()) * @WP_CONSTRAINT_TYPE_PW_PROPERTY: constraint applies * to a PipeWire property of the object (the ones returned by * wp_proxy_get_properties()) * @WP_CONSTRAINT_TYPE_G_PROPERTY: constraint applies to a #GObject * property of the object */ typedef enum { WP_CONSTRAINT_TYPE_NONE = 0, WP_CONSTRAINT_TYPE_PW_GLOBAL_PROPERTY, WP_CONSTRAINT_TYPE_PW_PROPERTY, WP_CONSTRAINT_TYPE_G_PROPERTY, } WpConstraintType; /** * WpConstraintVerb: * @WP_CONSTRAINT_VERB_EQUALS: `=` the subject's value must equal the * constraint's value * @WP_CONSTRAINT_VERB_IN_LIST: `c` the subject's value must equal at least * one of the values in the list given as the constraint's value * @WP_CONSTRAINT_VERB_IN_RANGE: `~` the subject's value must be a number * in the range defined by the constraint's value * @WP_CONSTRAINT_VERB_MATCHES: `#` the subject's value must match the * pattern specified in the constraint's value * @WP_CONSTRAINT_VERB_IS_PRESENT: `+` the subject property must exist * @WP_CONSTRAINT_VERB_IS_ABSENT: `-` the subject property must not exist */ typedef enum { WP_CONSTRAINT_VERB_EQUALS = '=', WP_CONSTRAINT_VERB_IN_LIST = 'c', WP_CONSTRAINT_VERB_IN_RANGE = '~', WP_CONSTRAINT_VERB_MATCHES = '#', WP_CONSTRAINT_VERB_IS_PRESENT = '+', WP_CONSTRAINT_VERB_IS_ABSENT = '-', } WpConstraintVerb; /** * WP_TYPE_OBJECT_INTEREST: * * The #WpObjectInterest #GType */ #define WP_TYPE_OBJECT_INTEREST (wp_object_interest_get_type ()) WP_API GType wp_object_interest_get_type (void) G_GNUC_CONST; typedef struct _WpObjectInterest WpObjectInterest; WP_API WpObjectInterest * wp_object_interest_new (GType gtype, ...) G_GNUC_NULL_TERMINATED; WP_API WpObjectInterest * wp_object_interest_new_valist (GType gtype, va_list * args); WP_API WpObjectInterest * wp_object_interest_new_type (GType gtype); WP_API void wp_object_interest_add_constraint (WpObjectInterest * self, WpConstraintType type, const gchar * subject, WpConstraintVerb verb, GVariant * value); WP_API WpObjectInterest * wp_object_interest_copy (WpObjectInterest * self); WP_API void wp_object_interest_free (WpObjectInterest * self); WP_API gboolean wp_object_interest_validate (WpObjectInterest * self, GError ** error); WP_API gboolean wp_object_interest_matches (WpObjectInterest * self, gpointer object); WP_API gboolean wp_object_interest_matches_full (WpObjectInterest * self, GType object_type, gpointer object, WpProperties * pw_props, WpProperties * pw_global_props); G_DEFINE_AUTOPTR_CLEANUP_FUNC (WpObjectInterest, wp_object_interest_free) G_END_DECLS #endif