equal
deleted
inserted
replaced
20 if next(jids) == nil then |
20 if next(jids) == nil then |
21 bare_cache[bare_cache_key] = nil; |
21 bare_cache[bare_cache_key] = nil; |
22 end |
22 end |
23 end |
23 end |
24 |
24 |
|
25 -- used indirectly for the on_evict callback |
25 local presence_cache = cache.new(cache_size, on_evict); |
26 local presence_cache = cache.new(cache_size, on_evict); |
26 |
27 |
27 local function cache_hook(event) |
28 local function cache_hook(event) |
28 local origin, stanza = event.origin, event.stanza; |
29 local origin, stanza = event.origin, event.stanza; |
29 local typ = stanza.attr.type; |
30 local typ = stanza.attr.type; |
39 return; |
40 return; |
40 end |
41 end |
41 |
42 |
42 local cache_key = username .. "\0" .. contact_full; |
43 local cache_key = username .. "\0" .. contact_full; |
43 local bare_cache_key = username .. "\0" .. contact_bare; |
44 local bare_cache_key = username .. "\0" .. contact_bare; |
|
45 |
|
46 local jids = bare_cache[bare_cache_key]; |
|
47 |
|
48 if typ == "unavailable" then -- remove from cache |
|
49 presence_cache:set(cache_key, nil); |
|
50 on_evict(cache_key); |
|
51 return; |
|
52 end |
|
53 |
44 local stamp = datetime.datetime(); |
54 local stamp = datetime.datetime(); |
45 local jids = bare_cache[bare_cache_key]; |
|
46 if jids then |
55 if jids then |
47 jids[contact_full] = stamp; |
56 jids[contact_full] = stamp; |
48 else |
57 else |
49 jids = { [contact_full] = stamp }; |
58 jids = { [contact_full] = stamp }; |
50 bare_cache[bare_cache_key] = jids; |
59 bare_cache[bare_cache_key] = jids; |