event-hook: rewrite the hook priorities enum

Hooks need to have a priority relative to the event they are executed on,
so it does not make much sense to have all kinds of different priorities
based also on the event type and/or the module where they are defined.
Also, it wouldn't be acceptable to have such an enumeration on the public API.
This commit is contained in:
George Kiagiadakis 2022-11-05 12:40:38 +02:00 committed by Julian Bouzas
parent e2b9cb0b5e
commit 24db3fe24a
6 changed files with 34 additions and 84 deletions

View file

@ -23,67 +23,17 @@ typedef enum {
WP_EVENT_HOOK_EXEC_TYPE_AFTER_EVENTS_WITH_EVENT,
} WpEventHookExecType;
#define PRIORITY_STEP 10
#define PRIORITY_JUMP 100
typedef enum
{
WP_EVENT_HOOK_DEFAULT_PRIORITY_BASE = 0,
WP_EVENT_HOOK_DEFAULT_PRIORITY_LINK_TARGET_SI = WP_EVENT_HOOK_DEFAULT_PRIORITY_BASE,
WP_EVENT_HOOK_DEFAULT_PRIORITY_PREPARE_LINK_SI = WP_EVENT_HOOK_DEFAULT_PRIORITY_LINK_TARGET_SI + PRIORITY_STEP,
WP_EVENT_HOOK_DEFAULT_PRIORITY_FIND_BEST_TARGET_SI = WP_EVENT_HOOK_DEFAULT_PRIORITY_PREPARE_LINK_SI + PRIORITY_STEP,
WP_EVENT_HOOK_DEFAULT_PRIORITY_FIND_DEFAULT_TARGET_SI = WP_EVENT_HOOK_DEFAULT_PRIORITY_FIND_BEST_TARGET_SI + PRIORITY_STEP,
WP_EVENT_HOOK_DEFAULT_PRIORITY_SAMPLE_USER_POLICY_HOOK = WP_EVENT_HOOK_DEFAULT_PRIORITY_FIND_DEFAULT_TARGET_SI + PRIORITY_STEP,
WP_EVENT_HOOK_DEFAULT_PRIORITY_FIND_DEFINED_TARGET_SI = WP_EVENT_HOOK_DEFAULT_PRIORITY_SAMPLE_USER_POLICY_HOOK + PRIORITY_STEP,
WP_EVENT_HOOK_DEFAULT_PRIORITY_RESCAN_POLICY = WP_EVENT_HOOK_DEFAULT_PRIORITY_FIND_DEFINED_TARGET_SI + PRIORITY_STEP,
WP_EVENT_HOOK_DEFAULT_PRIORITY_RESCAN_DEFAULT_NODES = WP_EVENT_HOOK_DEFAULT_PRIORITY_RESCAN_POLICY + PRIORITY_STEP,
WP_EVENT_HOOK_DEFAULT_PRIORITY_NODE_ADDED = WP_EVENT_HOOK_DEFAULT_PRIORITY_RESCAN_POLICY + PRIORITY_JUMP,
WP_EVENT_HOOK_DEFAULT_PRIORITY_NODE_ADDED_RESTORE_STREAM = WP_EVENT_HOOK_DEFAULT_PRIORITY_NODE_ADDED,
WP_EVENT_HOOK_DEFAULT_PRIORITY_NODE_ADDED_CREATE_ITEM = WP_EVENT_HOOK_DEFAULT_PRIORITY_NODE_ADDED_RESTORE_STREAM - PRIORITY_STEP,
WP_EVENT_HOOK_DEFAULT_PRIORITY_NODE_REMOVED = WP_EVENT_HOOK_DEFAULT_PRIORITY_NODE_ADDED + PRIORITY_JUMP,
WP_EVENT_HOOK_DEFAULT_PRIORITY_NODE_REMOVED_POLICY_BLUETOOTH = WP_EVENT_HOOK_DEFAULT_PRIORITY_NODE_REMOVED,
WP_EVENT_HOOK_DEFAULT_PRIORITY_NODE_REMOVED_CREATE_ITEM = WP_EVENT_HOOK_DEFAULT_PRIORITY_NODE_REMOVED_POLICY_BLUETOOTH - PRIORITY_STEP,
WP_EVENT_HOOK_DEFAULT_PRIORITY_NODE_CHANGED = WP_EVENT_HOOK_DEFAULT_PRIORITY_NODE_REMOVED + PRIORITY_JUMP,
WP_EVENT_HOOK_DEFAULT_PRIORITY_NODE_CHANGED_RESTORE_STREAM = WP_EVENT_HOOK_DEFAULT_PRIORITY_NODE_CHANGED,
WP_EVENT_HOOK_DEFAULT_PRIORITY_NODE_PARMS_CHANGED = WP_EVENT_HOOK_DEFAULT_PRIORITY_NODE_CHANGED + PRIORITY_JUMP,
WP_EVENT_HOOK_DEFAULT_PRIORITY_NODE_PARMS_CHANGED_POLICY_BLUETOOTH = WP_EVENT_HOOK_DEFAULT_PRIORITY_NODE_PARMS_CHANGED,
WP_EVENT_HOOK_DEFAULT_PRIORITY_DEVICE_ADDED = WP_EVENT_HOOK_DEFAULT_PRIORITY_NODE_PARMS_CHANGED + PRIORITY_JUMP,
WP_EVENT_HOOK_DEFAULT_PRIORITY_DEVICE_ADDED_DEFAULT_PROFILE = WP_EVENT_HOOK_DEFAULT_PRIORITY_DEVICE_ADDED,
WP_EVENT_HOOK_DEFAULT_PRIORITY_DEVICE_ADDED_POLICY_DEVICE_PROFILE = WP_EVENT_HOOK_DEFAULT_PRIORITY_DEVICE_ADDED_DEFAULT_PROFILE - PRIORITY_STEP,
WP_EVENT_HOOK_DEFAULT_PRIORITY_DEVICE_ADDED_POLICY_BLUETOOTH = WP_EVENT_HOOK_DEFAULT_PRIORITY_DEVICE_ADDED_POLICY_DEVICE_PROFILE - PRIORITY_STEP,
WP_EVENT_HOOK_DEFAULT_PRIORITY_DEVICE_ADDED_POLICY_DEVICE_ROUTES = WP_EVENT_HOOK_DEFAULT_PRIORITY_DEVICE_ADDED_POLICY_BLUETOOTH - PRIORITY_STEP,
WP_EVENT_HOOK_DEFAULT_PRIORITY_DEVICE_REMOVED = WP_EVENT_HOOK_DEFAULT_PRIORITY_DEVICE_ADDED + PRIORITY_JUMP,
WP_EVENT_HOOK_DEFAULT_PRIORITY_DEVICE_REMOVED_POLICY_DEVICE_PROFILE = WP_EVENT_HOOK_DEFAULT_PRIORITY_DEVICE_REMOVED,
WP_EVENT_HOOK_DEFAULT_PRIORITY_DEVICE_PARAMS_CHANGED = WP_EVENT_HOOK_DEFAULT_PRIORITY_DEVICE_REMOVED + PRIORITY_JUMP,
WP_EVENT_HOOK_DEFAULT_PRIORITY_DEVICE_PARAMS_CHANGED_DEFAULT_PROFILE = WP_EVENT_HOOK_DEFAULT_PRIORITY_DEVICE_PARAMS_CHANGED,
WP_EVENT_HOOK_DEFAULT_PRIORITY_DEVICE_PARAMS_CHANGED_POLICY_DEVICE_PROFILE = WP_EVENT_HOOK_DEFAULT_PRIORITY_DEVICE_PARAMS_CHANGED_DEFAULT_PROFILE - PRIORITY_STEP,
WP_EVENT_HOOK_DEFAULT_PRIORITY_DEVICE_PARAMS_CHANGED_POLICY_DEVICE_ROUTES = WP_EVENT_HOOK_DEFAULT_PRIORITY_DEVICE_PARAMS_CHANGED_POLICY_DEVICE_PROFILE - PRIORITY_JUMP,
WP_EVENT_HOOK_DEFAULT_PRIORITY_LINKABLE_ADDED = WP_EVENT_HOOK_DEFAULT_PRIORITY_DEVICE_PARAMS_CHANGED + PRIORITY_JUMP,
WP_EVENT_HOOK_DEFAULT_PRIORITY_LINKABLE_ADDED_CREATE_ITEM = WP_EVENT_HOOK_DEFAULT_PRIORITY_LINKABLE_ADDED,
WP_EVENT_HOOK_DEFAULT_PRIORITY_LINKABLE_REMOVED = WP_EVENT_HOOK_DEFAULT_PRIORITY_LINKABLE_ADDED + PRIORITY_JUMP,
WP_EVENT_HOOK_DEFAULT_PRIORITY_LINKABLE_REMOVED_CREATE_ITEM = WP_EVENT_HOOK_DEFAULT_PRIORITY_LINKABLE_REMOVED,
WP_EVENT_HOOK_DEFAULT_PRIORITY_DEFAULT_METADATA_ADDED = WP_EVENT_HOOK_DEFAULT_PRIORITY_LINKABLE_REMOVED + PRIORITY_JUMP,
WP_EVENT_HOOK_DEFAULT_PRIORITY_DEFAULT_METADATA_ADDED_DEFAULT_NODES = WP_EVENT_HOOK_DEFAULT_PRIORITY_DEFAULT_METADATA_ADDED,
WP_EVENT_HOOK_DEFAULT_PRIORITY_DEFAULT_METADATA_ADDED_DEFAULT_NODES_API = WP_EVENT_HOOK_DEFAULT_PRIORITY_DEFAULT_METADATA_ADDED_DEFAULT_NODES - PRIORITY_STEP,
WP_EVENT_HOOK_DEFAULT_PRIORITY_DEFAULT_METADATA_ADDED_RESTORE_STREAM = WP_EVENT_HOOK_DEFAULT_PRIORITY_DEFAULT_METADATA_ADDED_DEFAULT_NODES_API - PRIORITY_STEP,
WP_EVENT_HOOK_DEFAULT_PRIORITY_DEFAULT_METADATA_CHANGED = WP_EVENT_HOOK_DEFAULT_PRIORITY_DEFAULT_METADATA_ADDED_DEFAULT_NODES + PRIORITY_JUMP,
WP_EVENT_HOOK_DEFAULT_PRIORITY_DEFAULT_METADATA_CHANGED_DEFAULT_NODES = WP_EVENT_HOOK_DEFAULT_PRIORITY_DEFAULT_METADATA_CHANGED,
WP_EVENT_HOOK_DEFAULT_PRIORITY_DEFAULT_METADATA_CHANGED_DEFAULT_NODES_API = WP_EVENT_HOOK_DEFAULT_PRIORITY_DEFAULT_METADATA_CHANGED_DEFAULT_NODES - PRIORITY_STEP,
WP_EVENT_HOOK_DEFAULT_PRIORITY_DEFAULT_METADATA_CHANGED_POLICY_BLUETOOTH = WP_EVENT_HOOK_DEFAULT_PRIORITY_DEFAULT_METADATA_CHANGED_DEFAULT_NODES_API - PRIORITY_STEP,
WP_EVENT_HOOK_DEFAULT_PRIORITY_DEFAULT_METADATA_CHANGED_RESTORE_STREAM = WP_EVENT_HOOK_DEFAULT_PRIORITY_DEFAULT_METADATA_CHANGED_POLICY_BLUETOOTH - PRIORITY_STEP,
} WpEventHookDefaultPriorityType;
typedef enum {
WP_EVENT_HOOK_PRIORITY_LOWEST = -500,
WP_EVENT_HOOK_PRIORITY_ULTRA_LOW = -300,
WP_EVENT_HOOK_PRIORITY_VERY_LOW = -200,
WP_EVENT_HOOK_PRIORITY_LOW = -100,
WP_EVENT_HOOK_PRIORITY_NORMAL = 0,
WP_EVENT_HOOK_PRIORITY_HIGH = 100,
WP_EVENT_HOOK_PRIORITY_VERY_HIGH = 200,
WP_EVENT_HOOK_PRIORITY_ULTRA_HIGH = 300,
WP_EVENT_HOOK_PRIORITY_HIGHEST = 500,
} WpEventHookPriority;
/*! \defgroup wpeventhook WpEventHook */
/*!

View file

@ -151,8 +151,7 @@ wp_default_nodes_api_enable (WpPlugin * plugin, WpTransition * transition)
/* default metadata added */
hook = wp_simple_event_hook_new ("metadata-added@default-nodes-api",
WP_EVENT_HOOK_DEFAULT_PRIORITY_DEFAULT_METADATA_ADDED_DEFAULT_NODES_API,
WP_EVENT_HOOK_EXEC_TYPE_ON_EVENT,
WP_EVENT_HOOK_PRIORITY_NORMAL, WP_EVENT_HOOK_EXEC_TYPE_ON_EVENT,
g_cclosure_new ((GCallback) on_metadata_added, self, NULL));
wp_interest_event_hook_add_interest (WP_INTEREST_EVENT_HOOK (hook),
WP_CONSTRAINT_TYPE_PW_PROPERTY, "event.type", "=s", "object-added",
@ -164,8 +163,7 @@ wp_default_nodes_api_enable (WpPlugin * plugin, WpTransition * transition)
/* default metadata changed */
hook = wp_simple_event_hook_new ("metadata-changed@default-nodes-api",
WP_EVENT_HOOK_DEFAULT_PRIORITY_DEFAULT_METADATA_CHANGED_DEFAULT_NODES_API,
WP_EVENT_HOOK_EXEC_TYPE_ON_EVENT,
WP_EVENT_HOOK_PRIORITY_NORMAL, WP_EVENT_HOOK_EXEC_TYPE_ON_EVENT,
g_cclosure_new ((GCallback) on_metadata_changed_hook, self, NULL));
wp_interest_event_hook_add_interest (WP_INTEREST_EVENT_HOOK (hook),

View file

@ -592,8 +592,7 @@ wp_default_nodes_enable (WpPlugin * plugin, WpTransition * transition)
/* default metadata added */
hook = wp_simple_event_hook_new ("metadata-added@default-nodes",
WP_EVENT_HOOK_DEFAULT_PRIORITY_DEFAULT_METADATA_ADDED_DEFAULT_NODES,
WP_EVENT_HOOK_EXEC_TYPE_ON_EVENT,
WP_EVENT_HOOK_PRIORITY_NORMAL, WP_EVENT_HOOK_EXEC_TYPE_ON_EVENT,
g_cclosure_new ((GCallback) on_metadata_added, self, NULL));
wp_interest_event_hook_add_interest (WP_INTEREST_EVENT_HOOK (hook),
WP_CONSTRAINT_TYPE_PW_PROPERTY, "event.type", "=s", "object-added",
@ -605,8 +604,7 @@ wp_default_nodes_enable (WpPlugin * plugin, WpTransition * transition)
/* default metadata changed */
hook = wp_simple_event_hook_new ("metadata-changed@default-nodes",
WP_EVENT_HOOK_DEFAULT_PRIORITY_DEFAULT_METADATA_CHANGED_DEFAULT_NODES,
WP_EVENT_HOOK_EXEC_TYPE_ON_EVENT,
WP_EVENT_HOOK_PRIORITY_NORMAL, WP_EVENT_HOOK_EXEC_TYPE_ON_EVENT,
g_cclosure_new ((GCallback) on_metadata_changed, self, NULL));
wp_interest_event_hook_add_interest (WP_INTEREST_EVENT_HOOK (hook),
@ -638,9 +636,8 @@ wp_default_nodes_enable (WpPlugin * plugin, WpTransition * transition)
/* register rescan hook as an after event */
hook = wp_simple_event_hook_new("rescan@default-nodes",
WP_EVENT_HOOK_DEFAULT_PRIORITY_RESCAN_DEFAULT_NODES,
WP_EVENT_HOOK_EXEC_TYPE_AFTER_EVENTS,
g_cclosure_new ((GCallback) rescan, self, NULL));
WP_EVENT_HOOK_PRIORITY_NORMAL, WP_EVENT_HOOK_EXEC_TYPE_AFTER_EVENTS,
g_cclosure_new ((GCallback) rescan, self, NULL));
/* default.configured.audio.sink changed */
wp_interest_event_hook_add_interest (WP_INTEREST_EVENT_HOOK (hook),

View file

@ -269,8 +269,7 @@ wp_default_profile_enable (WpPlugin * plugin, WpTransition * transition)
/* device added */
hook = wp_simple_event_hook_new ("device-added@m-default-profile",
WP_EVENT_HOOK_DEFAULT_PRIORITY_DEVICE_ADDED_DEFAULT_PROFILE,
WP_EVENT_HOOK_EXEC_TYPE_ON_EVENT,
WP_EVENT_HOOK_PRIORITY_NORMAL, WP_EVENT_HOOK_EXEC_TYPE_ON_EVENT,
g_cclosure_new ((GCallback) on_device_added, self, NULL));
wp_interest_event_hook_add_interest (WP_INTEREST_EVENT_HOOK (hook),
WP_CONSTRAINT_TYPE_PW_PROPERTY, "event.type", "=s", "object-added",
@ -281,8 +280,7 @@ wp_default_profile_enable (WpPlugin * plugin, WpTransition * transition)
/* device params changed */
hook = wp_simple_event_hook_new ("device-parms-changed@m-default-profile",
WP_EVENT_HOOK_DEFAULT_PRIORITY_DEVICE_PARAMS_CHANGED_DEFAULT_PROFILE,
WP_EVENT_HOOK_EXEC_TYPE_ON_EVENT,
WP_EVENT_HOOK_PRIORITY_NORMAL, WP_EVENT_HOOK_EXEC_TYPE_ON_EVENT,
g_cclosure_new ((GCallback) on_device_params_changed_hook, self, NULL));
wp_interest_event_hook_add_interest (WP_INTEREST_EVENT_HOOK (hook),
WP_CONSTRAINT_TYPE_PW_PROPERTY, "event.type", "=s", "params-changed",

View file

@ -1875,11 +1875,8 @@ simple_event_hook_new (lua_State *L)
priority_type = lua_gettable (L, 1);
if (priority_type == LUA_TNUMBER)
priority = lua_tointeger (L, -1);
else if (priority_type == LUA_TSTRING)
priority = wplua_lua_to_enum (L, -1,
WP_TYPE_EVENT_HOOK_DEFAULT_PRIORITY_TYPE);
else
luaL_error (L, "SimpleEventHook: expected 'priority' as number or string");
luaL_error (L, "SimpleEventHook: expected 'priority' as number");
lua_pop (L, 1);
lua_pushliteral (L, "type");
@ -2061,11 +2058,8 @@ async_event_hook_new (lua_State *L)
priority_type = lua_gettable(L, 1);
if (priority_type == LUA_TNUMBER)
priority = lua_tointeger (L, -1);
else if (priority_type == LUA_TSTRING)
priority = wplua_lua_to_enum(L, -1,
WP_TYPE_EVENT_HOOK_DEFAULT_PRIORITY_TYPE);
else
luaL_error(L, "AsyncEventHook: expected 'priority' as number or string");
luaL_error(L, "AsyncEventHook: expected 'priority' as number");
lua_pop (L, 1);
lua_pushliteral (L, "type");

View file

@ -191,11 +191,24 @@ local Feature = {
},
}
local HookPriority = {
LOWEST = -500,
ULTRA_LOW = -300,
VERY_LOW = -200,
LOW = -100,
NORMAL = 0,
HIGH = 100,
VERY_HIGH = 200,
ULTRA_HIGH = 300,
HIGHEST = 500,
}
SANDBOX_EXPORT = {
Debug = Debug,
Id = Id,
Features = Features,
Feature = Feature,
HookPriority = HookPriority,
GLib = GLib,
I18n = I18n,
Log = WpLog,