From a4ec7538bc0e03c13ea212e26da564b14e6e72f0 Mon Sep 17 00:00:00 2001 From: George Kiagiadakis Date: Tue, 2 Mar 2021 14:08:43 +0200 Subject: [PATCH] lua/api: make the type optional when declaring Interest as a function argument it makes no sense to specify the type when calling, for instance, session:lookup_endpoint() or similar functions it also makes it easier to use iterate or lookup in the object manager, when we already know the type of the objects that the om contains --- modules/module-lua-scripting/api.c | 47 ++++++++++++++-------------- src/scripts/access/access-portal.lua | 2 -- src/scripts/create-endpoint.lua | 1 - src/scripts/policy-endpoint.lua | 7 +---- 4 files changed, 25 insertions(+), 32 deletions(-) diff --git a/modules/module-lua-scripting/api.c b/modules/module-lua-scripting/api.c index 0e23013a..13933d4f 100644 --- a/modules/module-lua-scripting/api.c +++ b/modules/module-lua-scripting/api.c @@ -462,31 +462,32 @@ object_interest_new_add_constraint (lua_State *L, GType type, } static int -object_interest_new_index (lua_State *L, int idx) +object_interest_new_index (lua_State *L, int idx, GType def_type) { WpObjectInterest *interest = NULL; - GType type = 0; + GType type = def_type; gchar *typestr; luaL_checktype (L, idx, LUA_TTABLE); - /* type = "string" -> required */ + /* type = "string" */ lua_pushliteral (L, "type"); - if (lua_gettable (L, idx) != LUA_TSTRING) - luaL_error (L, "Interest: expected 'type' as string"); + if (lua_gettable (L, idx) == LUA_TSTRING) { + /* "device" -> "WpDevice" */ + typestr = g_strdup_printf ("Wp%s", lua_tostring (L, -1)); + if (typestr[2] != 0) { + typestr[2] = g_ascii_toupper (typestr[2]); + type = g_type_from_name (typestr); + } + g_free (typestr); - /* "device" -> "WpDevice" */ - typestr = g_strdup_printf ("Wp%s", lua_tostring (L, -1)); - if (typestr[2] != 0) { - typestr[2] = g_ascii_toupper (typestr[2]); - type = g_type_from_name (typestr); + if (type == G_TYPE_INVALID) + luaL_error (L, "Interest: unknown type '%s'", lua_tostring (L, -1)); } - g_free (typestr); + else if (def_type == G_TYPE_INVALID) + luaL_error (L, "Interest: expected 'type' as string"); lua_pop (L, 1); - if (!type) - luaL_error (L, "Interest: unknown type '%s'", lua_tostring (L, -1)); - interest = wp_object_interest_new_type (type); wplua_pushboxed (L, WP_TYPE_OBJECT_INTEREST, interest); @@ -506,7 +507,7 @@ object_interest_new_index (lua_State *L, int idx) static int object_interest_new (lua_State *L) { - return object_interest_new_index (L, 1); + return object_interest_new_index (L, 1, G_TYPE_INVALID); } static int @@ -534,14 +535,14 @@ static const luaL_Reg object_interest_methods[] = { }; static WpObjectInterest * -get_optional_object_interest (lua_State *L, int idx) +get_optional_object_interest (lua_State *L, int idx, GType def_type) { if (lua_isnil (L, idx)) return NULL; else if (lua_isuserdata (L, idx)) return wplua_checkboxed (L, idx, WP_TYPE_OBJECT_INTEREST); else if (lua_istable (L, idx)) { - object_interest_new_index (L, idx); + object_interest_new_index (L, idx, def_type); return wplua_toboxed (L, -1); } else return NULL; @@ -594,7 +595,7 @@ static int object_manager_iterate (lua_State *L) { WpObjectManager *om = wplua_checkobject (L, 1, WP_TYPE_OBJECT_MANAGER); - WpObjectInterest *oi = get_optional_object_interest (L, 2); + WpObjectInterest *oi = get_optional_object_interest (L, 2, G_TYPE_OBJECT); WpIterator *it = oi ? wp_object_manager_new_filtered_iterator_full (om, wp_object_interest_ref (oi)) : @@ -606,7 +607,7 @@ static int object_manager_lookup (lua_State *L) { WpObjectManager *om = wplua_checkobject (L, 1, WP_TYPE_OBJECT_MANAGER); - WpObjectInterest *oi = get_optional_object_interest (L, 2); + WpObjectInterest *oi = get_optional_object_interest (L, 2, G_TYPE_OBJECT); WpObject *o = oi ? wp_object_manager_lookup_full (om, wp_object_interest_ref (oi)) : wp_object_manager_lookup (om, G_TYPE_OBJECT, NULL); @@ -659,7 +660,7 @@ static int session_iterate_endpoints (lua_State *L) { WpSession *session = wplua_checkobject (L, 1, WP_TYPE_SESSION); - WpObjectInterest *oi = get_optional_object_interest (L, 2); + WpObjectInterest *oi = get_optional_object_interest (L, 2, WP_TYPE_ENDPOINT); WpIterator *it = oi ? wp_session_new_endpoints_filtered_iterator_full (session, wp_object_interest_ref (oi)) : @@ -671,7 +672,7 @@ static int session_lookup_endpoint (lua_State *L) { WpSession *session = wplua_checkobject (L, 1, WP_TYPE_SESSION); - WpObjectInterest *oi = get_optional_object_interest (L, 2); + WpObjectInterest *oi = get_optional_object_interest (L, 2, WP_TYPE_ENDPOINT); WpEndpoint *ep = oi ? wp_session_lookup_endpoint_full (session, wp_object_interest_ref (oi)) : wp_session_lookup_endpoint (session, NULL); @@ -686,7 +687,7 @@ static int session_iterate_links (lua_State *L) { WpSession *session = wplua_checkobject (L, 1, WP_TYPE_SESSION); - WpObjectInterest *oi = get_optional_object_interest (L, 2); + WpObjectInterest *oi = get_optional_object_interest (L, 2, WP_TYPE_ENDPOINT_LINK); WpIterator *it = oi ? wp_session_new_links_filtered_iterator_full (session, wp_object_interest_ref (oi)) : @@ -698,7 +699,7 @@ static int session_lookup_link (lua_State *L) { WpSession *session = wplua_checkobject (L, 1, WP_TYPE_SESSION); - WpObjectInterest *oi = get_optional_object_interest (L, 2); + WpObjectInterest *oi = get_optional_object_interest (L, 2, WP_TYPE_ENDPOINT_LINK); WpEndpointLink *l = oi ? wp_session_lookup_link_full (session, wp_object_interest_ref (oi)) : wp_session_lookup_link (session, NULL); diff --git a/src/scripts/access/access-portal.lua b/src/scripts/access/access-portal.lua index f098c565..17bce11e 100644 --- a/src/scripts/access/access-portal.lua +++ b/src/scripts/access/access-portal.lua @@ -35,7 +35,6 @@ function setPermissions (client, nodes_om, allow_client, allow_nodes) -- Update permissions on client's nodes for node in nodes_om:iterate { - type = "node", Constraint { "client.id", "=", client_id }, Constraint { "media.role", "=", "Camera" }, Constraint { "media.class", "=", "Video/Source" }, @@ -114,7 +113,6 @@ if pps_plugin then if table == "devices" or id == "camera" then for app_id, _ in pairs(permissions) do for client in clients_om:iterate { - type = "client", Constraint { "pipewire.access.portal.app_id", "=", app_id } } do updateClientPermissions (client, nodes_om, permissions) diff --git a/src/scripts/create-endpoint.lua b/src/scripts/create-endpoint.lua index a58289d9..46262cc3 100644 --- a/src/scripts/create-endpoint.lua +++ b/src/scripts/create-endpoint.lua @@ -18,7 +18,6 @@ function addEndpoint (node, session_name, endpoint_type, priority) -- find the session session = sessions_om:lookup { - type = "session", Constraint { "session.name", "=", session_name } } if session == nil then diff --git a/src/scripts/policy-endpoint.lua b/src/scripts/policy-endpoint.lua index 163ba3ef..7c03a37e 100644 --- a/src/scripts/policy-endpoint.lua +++ b/src/scripts/policy-endpoint.lua @@ -115,12 +115,10 @@ end function moveEndpointFromNodeId (ep_node_id, target_node_id) for session in om_session:iterate() do local ep = session:lookup_endpoint { - type = "endpoint", Constraint { "node.id", "=", tostring(ep_node_id), type = "pw" } } if ep then local target = session:lookup_endpoint { - type = "endpoint", Constraint { "node.id", "=", tostring(target_node_id), type = "pw" } } if target then @@ -139,14 +137,12 @@ function reevaluateAutoLinkedEndpoints (ep_media_class, target_id) default_endpoint_target[ep_media_class] = target_id -- move auto linked endpoints to the new target - for session in om_session:iterate { type = "session" } do + for session in om_session:iterate() do local target = session:lookup_endpoint { - type = "endpoint", Constraint { "bound-id", "=", target_id, type = "gobject" } } if target then for ep in session:iterate_endpoints { - type = "endpoint", Constraint { "media-class", "=", ep_media_class, type = "gobject" }, } do if auto_linked_endpoints[ep["bound-id"]] == true then @@ -272,7 +268,6 @@ om_metadata:connect("object-added", function (om, metadata) moveEndpointFromNodeId (subject, tonumber (value)) elseif config.follow and string.find(key, "default.session.endpoint") then local session = om_session:lookup { - type = "session", Constraint { "bound-id", "=", subject, type = "gobject" } } if session then