author | tmolitor <thilo@eightysoft.de> |
Sun, 27 Aug 2017 21:11:58 +0200 | |
changeset 2758 | d1aa5fc005f7 |
parent 2751 | a688b31295ea |
child 2761 | 595d9d68fd11 |
permissions | -rw-r--r-- |
2610
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
1 |
-- Copyright (C) 2016 Kim Alvefur |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
2 |
-- Copyright (C) 2017 Thilo Molitor |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
3 |
-- |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
4 |
|
2751
a688b31295ea
mod_csi_battery_saver: only depend on mod_track_muc_joins if actually used
tmolitor <thilo@eightysoft.de>
parents:
2750
diff
changeset
|
5 |
local filter_muc = module:get_option_boolean("csi_battery_saver_filter_muc", false); |
a688b31295ea
mod_csi_battery_saver: only depend on mod_track_muc_joins if actually used
tmolitor <thilo@eightysoft.de>
parents:
2750
diff
changeset
|
6 |
|
2610
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
7 |
module:depends"csi" |
2751
a688b31295ea
mod_csi_battery_saver: only depend on mod_track_muc_joins if actually used
tmolitor <thilo@eightysoft.de>
parents:
2750
diff
changeset
|
8 |
if filter_muc then module:depends"track_muc_joins"; end -- only depend on this module if we actually use it |
2610
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
9 |
local s_match = string.match; |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
10 |
local s_sub = string.sub; |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
11 |
local jid = require "util.jid"; |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
12 |
local new_queue = require "util.queue".new; |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
13 |
local datetime = require "util.datetime"; |
2745
69248dcd7cff
mod_csi_battery_saver: Fix interaction with smacks hibernation
tmolitor <thilo@eightysoft.de>
parents:
2741
diff
changeset
|
14 |
local st = require "util.stanza"; |
2610
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
15 |
|
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
16 |
local xmlns_delay = "urn:xmpp:delay"; |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
17 |
|
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
18 |
-- a log id for this module instance |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
19 |
local id = s_sub(require "util.hashes".sha256(datetime.datetime(), true), 1, 4); |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
20 |
|
2750
d3a2f4bdaf09
mod_csi_battery_saver: Add config option for better muc handling
tmolitor <thilo@eightysoft.de>
parents:
2749
diff
changeset
|
21 |
|
2610
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
22 |
-- Patched version of util.stanza:find() that supports giving stanza names |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
23 |
-- without their namespace, allowing for every namespace. |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
24 |
local function find(self, path) |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
25 |
local pos = 1; |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
26 |
local len = #path + 1; |
2739
b5fae17e4403
mod_csi_battery_saver: correctly handle encrypted message stanzas
tmolitor <thilo@eightysoft.de>
parents:
2610
diff
changeset
|
27 |
|
2610
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
28 |
repeat |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
29 |
local xmlns, name, text; |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
30 |
local char = s_sub(path, pos, pos); |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
31 |
if char == "@" then |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
32 |
return self.attr[s_sub(path, pos + 1)]; |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
33 |
elseif char == "{" then |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
34 |
xmlns, pos = s_match(path, "^([^}]+)}()", pos + 1); |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
35 |
end |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
36 |
name, text, pos = s_match(path, "^([^@/#]*)([/#]?)()", pos); |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
37 |
name = name ~= "" and name or nil; |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
38 |
if pos == len then |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
39 |
if text == "#" then |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
40 |
local child = xmlns ~= nil and self:get_child(name, xmlns) or self:child_with_name(name); |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
41 |
return child and child:get_text() or nil; |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
42 |
end |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
43 |
return xmlns ~= nil and self:get_child(name, xmlns) or self:child_with_name(name); |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
44 |
end |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
45 |
self = xmlns ~= nil and self:get_child(name, xmlns) or self:child_with_name(name); |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
46 |
until not self |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
47 |
return nil; |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
48 |
end |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
49 |
|
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
50 |
local function new_pump(output, ...) |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
51 |
-- luacheck: ignore 212/self |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
52 |
local q = new_queue(...); |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
53 |
local flush = true; |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
54 |
function q:pause() |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
55 |
flush = false; |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
56 |
end |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
57 |
function q:resume() |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
58 |
flush = true; |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
59 |
return q:flush(); |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
60 |
end |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
61 |
local push = q.push; |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
62 |
function q:push(item) |
2745
69248dcd7cff
mod_csi_battery_saver: Fix interaction with smacks hibernation
tmolitor <thilo@eightysoft.de>
parents:
2741
diff
changeset
|
63 |
local ok = push(self, item); |
2610
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
64 |
if not ok then |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
65 |
q:flush(); |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
66 |
output(item, self); |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
67 |
elseif flush then |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
68 |
return q:flush(); |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
69 |
end |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
70 |
return true; |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
71 |
end |
2749
b62cec32680e
mod_csi_battery_saver: Fix bug when smacks is resumed before hibernating
tmolitor <thilo@eightysoft.de>
parents:
2746
diff
changeset
|
72 |
function q:flush(alternative_output) |
b62cec32680e
mod_csi_battery_saver: Fix bug when smacks is resumed before hibernating
tmolitor <thilo@eightysoft.de>
parents:
2746
diff
changeset
|
73 |
local out = alternative_output or output; |
2610
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
74 |
local item = self:pop(); |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
75 |
while item do |
2749
b62cec32680e
mod_csi_battery_saver: Fix bug when smacks is resumed before hibernating
tmolitor <thilo@eightysoft.de>
parents:
2746
diff
changeset
|
76 |
out(item, self); |
2610
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
77 |
item = self:pop(); |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
78 |
end |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
79 |
return true; |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
80 |
end |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
81 |
return q; |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
82 |
end |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
83 |
|
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
84 |
local function is_stamp_needed(stanza, session) |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
85 |
local st_name = stanza and stanza.name or nil; |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
86 |
if st_name == "presence" then |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
87 |
return true; |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
88 |
elseif st_name == "message" then |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
89 |
if stanza:get_child("delay", xmlns_delay) then return false; end |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
90 |
if stanza.attr.type == "chat" or stanza.attr.type == "groupchat" then return true; end |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
91 |
end |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
92 |
return false; |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
93 |
end |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
94 |
|
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
95 |
local function add_stamp(stanza, session) |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
96 |
stanza = stanza:tag("delay", { xmlns = xmlns_delay, from = session.host, stamp = datetime.datetime()}); |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
97 |
return stanza; |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
98 |
end |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
99 |
|
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
100 |
local function is_important(stanza, session) |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
101 |
local st_name = stanza and stanza.name or nil; |
2745
69248dcd7cff
mod_csi_battery_saver: Fix interaction with smacks hibernation
tmolitor <thilo@eightysoft.de>
parents:
2741
diff
changeset
|
102 |
if not st_name then return true; end -- nonzas are always important |
2610
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
103 |
if st_name == "presence" then |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
104 |
-- TODO check for MUC status codes? |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
105 |
return false; |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
106 |
elseif st_name == "message" then |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
107 |
-- unpack carbon copies |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
108 |
local stanza_direction = "in"; |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
109 |
local carbon; |
2758
d1aa5fc005f7
mod_csi_battery_saver: Consider chat markers and outgoing carbon copies as important.
tmolitor <thilo@eightysoft.de>
parents:
2751
diff
changeset
|
110 |
local st_type; |
2610
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
111 |
-- support carbon copied message stanzas having an arbitrary message-namespace or no message-namespace at all |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
112 |
if not carbon then carbon = find(stanza, "{urn:xmpp:carbons:2}/forwarded/message"); end |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
113 |
if not carbon then carbon = find(stanza, "{urn:xmpp:carbons:1}/forwarded/message"); end |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
114 |
stanza_direction = carbon and stanza:child_with_name("sent") and "out" or "in"; |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
115 |
--session.log("debug", "mod_csi_battery_saver(%s): stanza_direction = %s, carbon = %s, stanza = %s", id, stanza_direction, carbon and "true" or "false", tostring(stanza)); |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
116 |
if carbon then stanza = carbon; end |
2758
d1aa5fc005f7
mod_csi_battery_saver: Consider chat markers and outgoing carbon copies as important.
tmolitor <thilo@eightysoft.de>
parents:
2751
diff
changeset
|
117 |
st_type = stanza.attr.type; |
d1aa5fc005f7
mod_csi_battery_saver: Consider chat markers and outgoing carbon copies as important.
tmolitor <thilo@eightysoft.de>
parents:
2751
diff
changeset
|
118 |
|
d1aa5fc005f7
mod_csi_battery_saver: Consider chat markers and outgoing carbon copies as important.
tmolitor <thilo@eightysoft.de>
parents:
2751
diff
changeset
|
119 |
-- headline message are always not important |
d1aa5fc005f7
mod_csi_battery_saver: Consider chat markers and outgoing carbon copies as important.
tmolitor <thilo@eightysoft.de>
parents:
2751
diff
changeset
|
120 |
if st_type == "headline" then return false; end |
d1aa5fc005f7
mod_csi_battery_saver: Consider chat markers and outgoing carbon copies as important.
tmolitor <thilo@eightysoft.de>
parents:
2751
diff
changeset
|
121 |
|
d1aa5fc005f7
mod_csi_battery_saver: Consider chat markers and outgoing carbon copies as important.
tmolitor <thilo@eightysoft.de>
parents:
2751
diff
changeset
|
122 |
-- chat markers (XEP-0333) are important, too, because some clients use them to update their notifications |
d1aa5fc005f7
mod_csi_battery_saver: Consider chat markers and outgoing carbon copies as important.
tmolitor <thilo@eightysoft.de>
parents:
2751
diff
changeset
|
123 |
if find(stanza, "{urn:xmpp:chat-markers:0}") then return true; end; |
d1aa5fc005f7
mod_csi_battery_saver: Consider chat markers and outgoing carbon copies as important.
tmolitor <thilo@eightysoft.de>
parents:
2751
diff
changeset
|
124 |
|
d1aa5fc005f7
mod_csi_battery_saver: Consider chat markers and outgoing carbon copies as important.
tmolitor <thilo@eightysoft.de>
parents:
2751
diff
changeset
|
125 |
-- carbon copied outgoing messages are important (some clients update their notifications upon receiving those) --> don't return false here |
d1aa5fc005f7
mod_csi_battery_saver: Consider chat markers and outgoing carbon copies as important.
tmolitor <thilo@eightysoft.de>
parents:
2751
diff
changeset
|
126 |
--if carbon and stanza_direction == "out" then return false; end |
d1aa5fc005f7
mod_csi_battery_saver: Consider chat markers and outgoing carbon copies as important.
tmolitor <thilo@eightysoft.de>
parents:
2751
diff
changeset
|
127 |
|
d1aa5fc005f7
mod_csi_battery_saver: Consider chat markers and outgoing carbon copies as important.
tmolitor <thilo@eightysoft.de>
parents:
2751
diff
changeset
|
128 |
-- We can't check for body contents in encrypted messages, so let's treat them as important |
d1aa5fc005f7
mod_csi_battery_saver: Consider chat markers and outgoing carbon copies as important.
tmolitor <thilo@eightysoft.de>
parents:
2751
diff
changeset
|
129 |
-- Some clients don't even set a body or an empty body for encrypted messages |
d1aa5fc005f7
mod_csi_battery_saver: Consider chat markers and outgoing carbon copies as important.
tmolitor <thilo@eightysoft.de>
parents:
2751
diff
changeset
|
130 |
|
2739
b5fae17e4403
mod_csi_battery_saver: correctly handle encrypted message stanzas
tmolitor <thilo@eightysoft.de>
parents:
2610
diff
changeset
|
131 |
-- check omemo https://xmpp.org/extensions/inbox/omemo.html |
b5fae17e4403
mod_csi_battery_saver: correctly handle encrypted message stanzas
tmolitor <thilo@eightysoft.de>
parents:
2610
diff
changeset
|
132 |
if stanza:get_child("encrypted", "eu.siacs.conversations.axolotl") or stanza:get_child("encrypted", "urn:xmpp:omemo:0") then return true; end |
2758
d1aa5fc005f7
mod_csi_battery_saver: Consider chat markers and outgoing carbon copies as important.
tmolitor <thilo@eightysoft.de>
parents:
2751
diff
changeset
|
133 |
|
2739
b5fae17e4403
mod_csi_battery_saver: correctly handle encrypted message stanzas
tmolitor <thilo@eightysoft.de>
parents:
2610
diff
changeset
|
134 |
-- check xep27 pgp https://xmpp.org/extensions/xep-0027.html |
b5fae17e4403
mod_csi_battery_saver: correctly handle encrypted message stanzas
tmolitor <thilo@eightysoft.de>
parents:
2610
diff
changeset
|
135 |
if stanza:get_child("x", "jabber:x:encrypted") then return true; end |
2758
d1aa5fc005f7
mod_csi_battery_saver: Consider chat markers and outgoing carbon copies as important.
tmolitor <thilo@eightysoft.de>
parents:
2751
diff
changeset
|
136 |
|
2739
b5fae17e4403
mod_csi_battery_saver: correctly handle encrypted message stanzas
tmolitor <thilo@eightysoft.de>
parents:
2610
diff
changeset
|
137 |
-- check xep373 pgp (OX) https://xmpp.org/extensions/xep-0373.html |
b5fae17e4403
mod_csi_battery_saver: correctly handle encrypted message stanzas
tmolitor <thilo@eightysoft.de>
parents:
2610
diff
changeset
|
138 |
if stanza:get_child("openpgp", "urn:xmpp:openpgp:0") then return true; end |
2758
d1aa5fc005f7
mod_csi_battery_saver: Consider chat markers and outgoing carbon copies as important.
tmolitor <thilo@eightysoft.de>
parents:
2751
diff
changeset
|
139 |
|
2610
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
140 |
local body = stanza:get_child_text("body"); |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
141 |
if st_type == "groupchat" then |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
142 |
if stanza:get_child_text("subject") then return true; end |
2750
d3a2f4bdaf09
mod_csi_battery_saver: Add config option for better muc handling
tmolitor <thilo@eightysoft.de>
parents:
2749
diff
changeset
|
143 |
if body == nil or body == "" then return false; end |
d3a2f4bdaf09
mod_csi_battery_saver: Add config option for better muc handling
tmolitor <thilo@eightysoft.de>
parents:
2749
diff
changeset
|
144 |
-- body contains text, let's see if we want to process it further |
d3a2f4bdaf09
mod_csi_battery_saver: Add config option for better muc handling
tmolitor <thilo@eightysoft.de>
parents:
2749
diff
changeset
|
145 |
if filter_muc then |
d3a2f4bdaf09
mod_csi_battery_saver: Add config option for better muc handling
tmolitor <thilo@eightysoft.de>
parents:
2749
diff
changeset
|
146 |
if body:find(session.username, 1, true) then return true; end |
d3a2f4bdaf09
mod_csi_battery_saver: Add config option for better muc handling
tmolitor <thilo@eightysoft.de>
parents:
2749
diff
changeset
|
147 |
local rooms = session.rooms_joined; |
d3a2f4bdaf09
mod_csi_battery_saver: Add config option for better muc handling
tmolitor <thilo@eightysoft.de>
parents:
2749
diff
changeset
|
148 |
if not rooms then return false; end |
d3a2f4bdaf09
mod_csi_battery_saver: Add config option for better muc handling
tmolitor <thilo@eightysoft.de>
parents:
2749
diff
changeset
|
149 |
local room_nick = rooms[jid.bare(stanza_direction == "in" and stanza.attr.from or stanza.attr.to)]; |
d3a2f4bdaf09
mod_csi_battery_saver: Add config option for better muc handling
tmolitor <thilo@eightysoft.de>
parents:
2749
diff
changeset
|
150 |
if room_nick and body:find(room_nick, 1, true) then return true; end |
d3a2f4bdaf09
mod_csi_battery_saver: Add config option for better muc handling
tmolitor <thilo@eightysoft.de>
parents:
2749
diff
changeset
|
151 |
return false; |
d3a2f4bdaf09
mod_csi_battery_saver: Add config option for better muc handling
tmolitor <thilo@eightysoft.de>
parents:
2749
diff
changeset
|
152 |
else |
d3a2f4bdaf09
mod_csi_battery_saver: Add config option for better muc handling
tmolitor <thilo@eightysoft.de>
parents:
2749
diff
changeset
|
153 |
return true; |
d3a2f4bdaf09
mod_csi_battery_saver: Add config option for better muc handling
tmolitor <thilo@eightysoft.de>
parents:
2749
diff
changeset
|
154 |
end |
2610
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
155 |
end |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
156 |
return body ~= nil and body ~= ""; |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
157 |
end |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
158 |
return true; |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
159 |
end |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
160 |
|
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
161 |
module:hook("csi-client-inactive", function (event) |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
162 |
local session = event.origin; |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
163 |
if session.pump then |
2749
b62cec32680e
mod_csi_battery_saver: Fix bug when smacks is resumed before hibernating
tmolitor <thilo@eightysoft.de>
parents:
2746
diff
changeset
|
164 |
session.log("debug", "mod_csi_battery_saver(%s): Client is inactive, buffering unimportant outgoing stanzas", id); |
2610
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
165 |
session.pump:pause(); |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
166 |
else |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
167 |
session.log("debug", "mod_csi_battery_saver(%s): Client is inactive the first time, initializing module for this session", id); |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
168 |
local pump = new_pump(session.send, 100); |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
169 |
pump:pause(); |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
170 |
session.pump = pump; |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
171 |
session._pump_orig_send = session.send; |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
172 |
function session.send(stanza) |
2749
b62cec32680e
mod_csi_battery_saver: Fix bug when smacks is resumed before hibernating
tmolitor <thilo@eightysoft.de>
parents:
2746
diff
changeset
|
173 |
session.log("debug", "mod_csi_battery_saver(%s): Got outgoing stanza: <%s>", id, tostring(stanza.name or stanza)); |
2610
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
174 |
local important = is_important(stanza, session); |
2746
2e30bb3a10d5
mod_csi_battery_saver: Fix a bug introduced by commit f43c77c69a8a
tmolitor <thilo@eightysoft.de>
parents:
2745
diff
changeset
|
175 |
-- clone stanzas before adding delay stamp and putting them into the queue |
2e30bb3a10d5
mod_csi_battery_saver: Fix a bug introduced by commit f43c77c69a8a
tmolitor <thilo@eightysoft.de>
parents:
2745
diff
changeset
|
176 |
if st.is_stanza(stanza) then stanza = st.clone(stanza); end |
2739
b5fae17e4403
mod_csi_battery_saver: correctly handle encrypted message stanzas
tmolitor <thilo@eightysoft.de>
parents:
2610
diff
changeset
|
177 |
-- add delay stamp to unimportant (buffered) stanzas that can/need be stamped |
2610
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
178 |
if not important and is_stamp_needed(stanza, session) then stanza = add_stamp(stanza, session); end |
2746
2e30bb3a10d5
mod_csi_battery_saver: Fix a bug introduced by commit f43c77c69a8a
tmolitor <thilo@eightysoft.de>
parents:
2745
diff
changeset
|
179 |
-- add stanza to outgoing queue and flush the buffer if needed |
2610
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
180 |
pump:push(stanza); |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
181 |
if important then |
2745
69248dcd7cff
mod_csi_battery_saver: Fix interaction with smacks hibernation
tmolitor <thilo@eightysoft.de>
parents:
2741
diff
changeset
|
182 |
session.log("debug", "mod_csi_battery_saver(%s): Encountered important stanza, flushing buffer: <%s>", id, tostring(stanza.name or stanza)); |
2610
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
183 |
pump:flush(); |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
184 |
end |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
185 |
return true; |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
186 |
end |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
187 |
end |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
188 |
end); |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
189 |
|
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
190 |
module:hook("csi-client-active", function (event) |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
191 |
local session = event.origin; |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
192 |
if session.pump then |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
193 |
session.log("debug", "mod_csi_battery_saver(%s): Client is active, resuming direct delivery", id); |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
194 |
session.pump:resume(); |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
195 |
end |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
196 |
end); |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
197 |
|
2749
b62cec32680e
mod_csi_battery_saver: Fix bug when smacks is resumed before hibernating
tmolitor <thilo@eightysoft.de>
parents:
2746
diff
changeset
|
198 |
-- clean up this session on hibernation start |
b62cec32680e
mod_csi_battery_saver: Fix bug when smacks is resumed before hibernating
tmolitor <thilo@eightysoft.de>
parents:
2746
diff
changeset
|
199 |
module:hook("smacks-hibernation-start", function (event) |
b62cec32680e
mod_csi_battery_saver: Fix bug when smacks is resumed before hibernating
tmolitor <thilo@eightysoft.de>
parents:
2746
diff
changeset
|
200 |
local session = event.origin; |
2745
69248dcd7cff
mod_csi_battery_saver: Fix interaction with smacks hibernation
tmolitor <thilo@eightysoft.de>
parents:
2741
diff
changeset
|
201 |
if session.pump then |
2749
b62cec32680e
mod_csi_battery_saver: Fix bug when smacks is resumed before hibernating
tmolitor <thilo@eightysoft.de>
parents:
2746
diff
changeset
|
202 |
session.log("debug", "mod_csi_battery_saver(%s): Hibernation started, flushing buffer and afterwards disabling for this session", id); |
2745
69248dcd7cff
mod_csi_battery_saver: Fix interaction with smacks hibernation
tmolitor <thilo@eightysoft.de>
parents:
2741
diff
changeset
|
203 |
session.pump:flush(); |
69248dcd7cff
mod_csi_battery_saver: Fix interaction with smacks hibernation
tmolitor <thilo@eightysoft.de>
parents:
2741
diff
changeset
|
204 |
session.send = session._pump_orig_send; |
69248dcd7cff
mod_csi_battery_saver: Fix interaction with smacks hibernation
tmolitor <thilo@eightysoft.de>
parents:
2741
diff
changeset
|
205 |
session.pump = nil; |
69248dcd7cff
mod_csi_battery_saver: Fix interaction with smacks hibernation
tmolitor <thilo@eightysoft.de>
parents:
2741
diff
changeset
|
206 |
session._pump_orig_send = nil; |
69248dcd7cff
mod_csi_battery_saver: Fix interaction with smacks hibernation
tmolitor <thilo@eightysoft.de>
parents:
2741
diff
changeset
|
207 |
end |
2749
b62cec32680e
mod_csi_battery_saver: Fix bug when smacks is resumed before hibernating
tmolitor <thilo@eightysoft.de>
parents:
2746
diff
changeset
|
208 |
end); |
2745
69248dcd7cff
mod_csi_battery_saver: Fix interaction with smacks hibernation
tmolitor <thilo@eightysoft.de>
parents:
2741
diff
changeset
|
209 |
|
2749
b62cec32680e
mod_csi_battery_saver: Fix bug when smacks is resumed before hibernating
tmolitor <thilo@eightysoft.de>
parents:
2746
diff
changeset
|
210 |
-- clean up this session on hibernation end as well |
b62cec32680e
mod_csi_battery_saver: Fix bug when smacks is resumed before hibernating
tmolitor <thilo@eightysoft.de>
parents:
2746
diff
changeset
|
211 |
-- but don't change resumed.send(), it is already overwritten with session.send() by the smacks module |
b62cec32680e
mod_csi_battery_saver: Fix bug when smacks is resumed before hibernating
tmolitor <thilo@eightysoft.de>
parents:
2746
diff
changeset
|
212 |
module:hook("smacks-hibernation-end", function (event) |
b62cec32680e
mod_csi_battery_saver: Fix bug when smacks is resumed before hibernating
tmolitor <thilo@eightysoft.de>
parents:
2746
diff
changeset
|
213 |
local session = event.resumed; |
b62cec32680e
mod_csi_battery_saver: Fix bug when smacks is resumed before hibernating
tmolitor <thilo@eightysoft.de>
parents:
2746
diff
changeset
|
214 |
if session.pump then |
b62cec32680e
mod_csi_battery_saver: Fix bug when smacks is resumed before hibernating
tmolitor <thilo@eightysoft.de>
parents:
2746
diff
changeset
|
215 |
session.log("debug", "mod_csi_battery_saver(%s): Hibernation ended without being started, flushing buffer and afterwards disabling for this session", id); |
b62cec32680e
mod_csi_battery_saver: Fix bug when smacks is resumed before hibernating
tmolitor <thilo@eightysoft.de>
parents:
2746
diff
changeset
|
216 |
session.pump:flush(session.send); -- use the fresh session.send() introduced by the smacks resume |
b62cec32680e
mod_csi_battery_saver: Fix bug when smacks is resumed before hibernating
tmolitor <thilo@eightysoft.de>
parents:
2746
diff
changeset
|
217 |
-- don't reset session.send() because this is not the send previously overwritten by this module, but a fresh one |
b62cec32680e
mod_csi_battery_saver: Fix bug when smacks is resumed before hibernating
tmolitor <thilo@eightysoft.de>
parents:
2746
diff
changeset
|
218 |
-- session.send = session._pump_orig_send; |
b62cec32680e
mod_csi_battery_saver: Fix bug when smacks is resumed before hibernating
tmolitor <thilo@eightysoft.de>
parents:
2746
diff
changeset
|
219 |
session.pump = nil; |
b62cec32680e
mod_csi_battery_saver: Fix bug when smacks is resumed before hibernating
tmolitor <thilo@eightysoft.de>
parents:
2746
diff
changeset
|
220 |
session._pump_orig_send = nil; |
b62cec32680e
mod_csi_battery_saver: Fix bug when smacks is resumed before hibernating
tmolitor <thilo@eightysoft.de>
parents:
2746
diff
changeset
|
221 |
end |
2745
69248dcd7cff
mod_csi_battery_saver: Fix interaction with smacks hibernation
tmolitor <thilo@eightysoft.de>
parents:
2741
diff
changeset
|
222 |
end); |
69248dcd7cff
mod_csi_battery_saver: Fix interaction with smacks hibernation
tmolitor <thilo@eightysoft.de>
parents:
2741
diff
changeset
|
223 |
|
2610
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
224 |
function module.unload() |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
225 |
module:log("info", "%s: Unloading module, flushing all buffers", id); |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
226 |
local host_sessions = prosody.hosts[module.host].sessions; |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
227 |
for _, user in pairs(host_sessions) do |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
228 |
for _, session in pairs(user.sessions) do |
2749
b62cec32680e
mod_csi_battery_saver: Fix bug when smacks is resumed before hibernating
tmolitor <thilo@eightysoft.de>
parents:
2746
diff
changeset
|
229 |
if session.pump then |
b62cec32680e
mod_csi_battery_saver: Fix bug when smacks is resumed before hibernating
tmolitor <thilo@eightysoft.de>
parents:
2746
diff
changeset
|
230 |
session.log("debug", "mod_csi_battery_saver(%s): Flushing buffer and restoring to original session.send()", id); |
b62cec32680e
mod_csi_battery_saver: Fix bug when smacks is resumed before hibernating
tmolitor <thilo@eightysoft.de>
parents:
2746
diff
changeset
|
231 |
session.pump:flush(); |
b62cec32680e
mod_csi_battery_saver: Fix bug when smacks is resumed before hibernating
tmolitor <thilo@eightysoft.de>
parents:
2746
diff
changeset
|
232 |
session.send = session._pump_orig_send; |
b62cec32680e
mod_csi_battery_saver: Fix bug when smacks is resumed before hibernating
tmolitor <thilo@eightysoft.de>
parents:
2746
diff
changeset
|
233 |
session.pump = nil; |
b62cec32680e
mod_csi_battery_saver: Fix bug when smacks is resumed before hibernating
tmolitor <thilo@eightysoft.de>
parents:
2746
diff
changeset
|
234 |
session._pump_orig_send = nil; |
b62cec32680e
mod_csi_battery_saver: Fix bug when smacks is resumed before hibernating
tmolitor <thilo@eightysoft.de>
parents:
2746
diff
changeset
|
235 |
end |
2610
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
236 |
end |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
237 |
end |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
238 |
end |
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
239 |
|
538c54d2dab3
mod_csi_battery_saver: CSI module to save battery on mobile devices, based on mod_csi_pump
tmolitor <thilo@eightysoft.de>
parents:
diff
changeset
|
240 |
module:log("info", "%s: Successfully loaded module", id); |