X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=util%2Ffilters.lua;h=f405c0bdd91f70a47a51fa3e2a11d0cba8f93b97;hb=76e441c85feb7186cb9b1dcfb5b89fe66bb709f7;hp=c2bdca070229f0f7ae6d9c816b56bea255c1efca;hpb=80433ad5d309c052274d943269b6d56a7d45cea0;p=prosody.git diff --git a/util/filters.lua b/util/filters.lua index c2bdca07..f405c0bd 100644 --- a/util/filters.lua +++ b/util/filters.lua @@ -8,11 +8,11 @@ local t_insert, t_remove = table.insert, table.remove; -module "filters" +local _ENV = nil; local new_filter_hooks = {}; -function initialize(session) +local function initialize(session) if not session.filters then local filters = {}; session.filters = filters; @@ -36,7 +36,7 @@ function initialize(session) return session.filter; end -function add_filter(session, type, callback, priority) +local function add_filter(session, type, callback, priority) if not session.filters then initialize(session); end @@ -45,6 +45,8 @@ function add_filter(session, type, callback, priority) if not filter_list then filter_list = {}; session.filters[type] = filter_list; + elseif filter_list[callback] then + return; -- Filter already added end priority = priority or 0; @@ -58,7 +60,7 @@ function add_filter(session, type, callback, priority) filter_list[callback] = priority; end -function remove_filter(session, type, callback) +local function remove_filter(session, type, callback) if not session.filters then return; end local filter_list = session.filters[type]; if filter_list and filter_list[callback] then @@ -72,11 +74,11 @@ function remove_filter(session, type, callback) end end -function add_filter_hook(callback) +local function add_filter_hook(callback) t_insert(new_filter_hooks, callback); end -function remove_filter_hook(callback) +local function remove_filter_hook(callback) for i=1,#new_filter_hooks do if new_filter_hooks[i] == callback then t_remove(new_filter_hooks, i); @@ -84,4 +86,10 @@ function remove_filter_hook(callback) end end -return _M; +return { + initialize = initialize; + add_filter = add_filter; + remove_filter = remove_filter; + add_filter_hook = add_filter_hook; + remove_filter_hook = remove_filter_hook; +};