From 533be77ada530a7b3cb12fb64c87c2f1d6a4688b Mon Sep 17 00:00:00 2001 From: Lucas Schwiderski Date: Thu, 2 Nov 2023 08:31:15 +0100 Subject: [PATCH] WIP --- src/lua_libpulse_glib/context.c | 3 ++- src/lua_libpulse_glib/context.h | 2 ++ src/lua_libpulse_glib/introspection.c | 2 ++ src/lua_libpulse_glib/pulseaudio.c | 17 +++++++++++++++++ 4 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/lua_libpulse_glib/context.c b/src/lua_libpulse_glib/context.c index 69a4cd9..3f8b571 100644 --- a/src/lua_libpulse_glib/context.c +++ b/src/lua_libpulse_glib/context.c @@ -44,7 +44,8 @@ void context_event_callback(pa_context* c, pa_subscription_event_type_t event_ty // Copy the `self` parameter lua_pushvalue(L, 2); lua_pushinteger(L, event_type); - lua_pushinteger(L, index); + // Adjust the index to Lua's 1-base + lua_pushinteger(L, index + 1); lua_call(L, 3, 0); } diff --git a/src/lua_libpulse_glib/context.h b/src/lua_libpulse_glib/context.h index 48ccb54..3594ed4 100644 --- a/src/lua_libpulse_glib/context.h +++ b/src/lua_libpulse_glib/context.h @@ -512,6 +512,8 @@ static const struct luaL_Reg context_f[] = { { "get_server_info", context_get_server_info }, { "get_sinks", context_get_sink_info_list }, { "get_sink_info", context_get_sink_info }, + { "get_sink_info_by_name", context_get_sink_info_by_name }, + { "get_sink_info_by_index", context_get_sink_info_by_index }, { "set_sink_volume", context_set_sink_volume }, { "set_sink_mute", context_set_sink_mute }, { "set_sink_suspended", context_set_sink_suspended }, diff --git a/src/lua_libpulse_glib/introspection.c b/src/lua_libpulse_glib/introspection.c index a77eb2a..e7595e2 100644 --- a/src/lua_libpulse_glib/introspection.c +++ b/src/lua_libpulse_glib/introspection.c @@ -72,6 +72,8 @@ void sink_info_callback(pa_context* c, const pa_sink_info* info, int eol, void* if (!eol) { lua_pushfstring(L, "only one sink info expected, but got multiple"); lua_call(L, 1, 0); + + free_lua_callback(data); } else { lua_pushnil(L); sink_info_to_lua(L, info); diff --git a/src/lua_libpulse_glib/pulseaudio.c b/src/lua_libpulse_glib/pulseaudio.c index d6b7368..8b8f74c 100644 --- a/src/lua_libpulse_glib/pulseaudio.c +++ b/src/lua_libpulse_glib/pulseaudio.c @@ -124,6 +124,7 @@ void createlib_context(lua_State* L) { luaL_setfuncs(L, context_mt, 0); } +#define enum_field(L, idx, name) (lua_pushinteger(L, PA_##name), lua_setfield(L, idx, #name)) void createlib_pulseaudio(lua_State* L) { luaL_newmetatable(L, LUA_PULSEAUDIO); @@ -134,6 +135,22 @@ void createlib_pulseaudio(lua_State* L) { luaL_setfuncs(L, pulseaudio_mt, 0); luaL_newlib(L, pulseaudio_lib); + + // pa_subscription_event_type + enum_field(L, -2, SUBSCRIPTION_EVENT_SINK); + enum_field(L, -2, SUBSCRIPTION_EVENT_SOURCE); + enum_field(L, -2, SUBSCRIPTION_EVENT_SINK_INPUT); + enum_field(L, -2, SUBSCRIPTION_EVENT_SOURCE_OUTPUT); + enum_field(L, -2, SUBSCRIPTION_EVENT_MODULE); + enum_field(L, -2, SUBSCRIPTION_EVENT_CLIENT); + enum_field(L, -2, SUBSCRIPTION_EVENT_SAMPLE_CACHE); + enum_field(L, -2, SUBSCRIPTION_EVENT_SERVER); + enum_field(L, -2, SUBSCRIPTION_EVENT_CARD); + enum_field(L, -2, SUBSCRIPTION_EVENT_NEW); + enum_field(L, -2, SUBSCRIPTION_EVENT_CHANGE); + enum_field(L, -2, SUBSCRIPTION_EVENT_REMOVE); + enum_field(L, -2, SUBSCRIPTION_EVENT_FACILITY_MASK); + enum_field(L, -2, SUBSCRIPTION_EVENT_TYPE_MASK); }