Software /
code /
prosody
Annotate
util/filters.lua @ 3139:7b4f180d7c6f
util.filters: Don't traceback with no filters of a type added
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Wed, 02 Jun 2010 13:03:55 +0100 |
parent | 3135:f29a297471e3 |
child | 3140:8c6ed6fd2d35 |
rev | line source |
---|---|
3133
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1 -- Prosody IM |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2 -- Copyright (C) 2008-2010 Matthew Wild |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
3 -- Copyright (C) 2008-2010 Waqas Hussain |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
4 -- |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5 -- This project is MIT/X11 licensed. Please see the |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
6 -- COPYING file in the source package for more information. |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
7 -- |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
8 |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
9 local t_insert, t_remove = table.insert, table.remove; |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
10 |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
11 module "filters" |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
12 |
3134
9a29ad6a9b97
util.filters: Expose the initialization function
Matthew Wild <mwild1@gmail.com>
parents:
3133
diff
changeset
|
13 function initialize(session) |
3133
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
14 local filters = {}; |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
15 session.filters = filters; |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
16 |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
17 function session.filter(type, data) |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
18 local filter_list = filters[type]; |
3139
7b4f180d7c6f
util.filters: Don't traceback with no filters of a type added
Matthew Wild <mwild1@gmail.com>
parents:
3135
diff
changeset
|
19 if filter_list then |
7b4f180d7c6f
util.filters: Don't traceback with no filters of a type added
Matthew Wild <mwild1@gmail.com>
parents:
3135
diff
changeset
|
20 for i = 1, #filter_list do |
7b4f180d7c6f
util.filters: Don't traceback with no filters of a type added
Matthew Wild <mwild1@gmail.com>
parents:
3135
diff
changeset
|
21 data = filter_list[i](data); |
7b4f180d7c6f
util.filters: Don't traceback with no filters of a type added
Matthew Wild <mwild1@gmail.com>
parents:
3135
diff
changeset
|
22 end |
3133
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
23 end |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
24 return data; |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
25 end |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
26 end |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
27 |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
28 function add_filter(session, type, callback, priority) |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
29 if not session.filters then |
3134
9a29ad6a9b97
util.filters: Expose the initialization function
Matthew Wild <mwild1@gmail.com>
parents:
3133
diff
changeset
|
30 initialize(session); |
3133
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
31 end |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
32 |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
33 local filter_list = session.filters[type]; |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
34 if not filter_list then |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
35 filter_list = {}; |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
36 session.filters[type] = filter_list; |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
37 end |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
38 |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
39 priority = priority or 0; |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
40 |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
41 local i = 0; |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
42 repeat |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
43 i = i + 1; |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
44 until not filter_list[i] or filter_list[filter_list[i]] >= priority; |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
45 |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
46 t_insert(filter_list, i, callback); |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
47 filter_list[callback] = priority; |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
48 end |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
49 |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
50 function remove_filter(session, type, callback) |
3135
f29a297471e3
util.filters: Don't traceback when trying to remove a filter from an uninitialized object
Matthew Wild <mwild1@gmail.com>
parents:
3134
diff
changeset
|
51 if not session.filters then return; end |
3133
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
52 local filter_list = session.filters[type]; |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
53 if filter_list and filter_list[callback] then |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
54 for i=1, #filter_list do |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
55 if filter_list[i] == callback then |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
56 t_remove(filter_list, i); |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
57 filter_list[callback] = nil; |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
58 return true; |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
59 end |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
60 end |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
61 end |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
62 end |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
63 |
d3f16b4c1ecb
util.filters: New utility library for managing filters on an object
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
64 return _M; |