Mercurial > prosody-modules
comparison mod_presence_cache/mod_presence_cache.lua @ 2152:bb4a2e4b7ba7
mod_presence_cache: Forget about cached presence when receiving unavailable
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sun, 03 Apr 2016 00:37:11 +0200 |
parents | ed2bb50d4f91 |
children | aa24d49c47ef |
comparison
equal
deleted
inserted
replaced
2151:96aca307964b | 2152:bb4a2e4b7ba7 |
---|---|
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; |