Blame view
matrix-util.js
4.69 KB
93a0e5644
|
1 |
'use strict'; |
70b9ea66b
|
2 |
var moment = require('moment'); |
9d69d361f
|
3 |
var momentFormat = 'YYYY-MM-DD HH:mm:ss'; |
70b9ea66b
|
4 5 |
module.exports = MatrixUtil; |
0a0dd5297
|
6 7 8 9 10 11 12 13 14 15 16 17 |
function _cleanPartnerId(partnerId) { let cleaned = partnerId; try { cleaned = cleaned.toLocaleString(); cleaned = cleaned.trim().toLowerCase(); } catch(e) { return partnerId; } return cleaned; } |
70b9ea66b
|
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
function MatrixUtil(options) { if (!options) { console.trace('Undefined options'); process.exit(1); } this.matrix = options.matrix; if (!this.matrix) { console.trace("Matrix not set"); process.exit(1); } this.logger = options.logger; if (!this.logger) { console.trace("Logger not set"); process.exit(1); } } MatrixUtil.prototype.updateBuddyState = function(jid, state, statusText, resource) { |
f7594efa6
|
38 |
if (!jid) {return; } |
70b9ea66b
|
39 |
if (jid == 'undefined') {return; } |
637ced97f
|
40 |
|
0a0dd5297
|
41 |
jid = _cleanPartnerId(jid); |
70b9ea66b
|
42 |
|
bd0c80ebf
|
43 44 45 |
if (!resource) { resource = 'undefined'; } |
93a0e5644
|
46 47 |
let logger = this.logger; let matrix = this.matrix; |
70b9ea66b
|
48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
logger.verbose('Buddy state change', {jid: jid, state: state, statusText: statusText, resource: resource}); if (!matrix) { return; } if (!matrix.buddies) { matrix.buddies = {}; } if (!matrix.buddies[jid]) { matrix.buddies[jid] = {resources: {}}; } |
ab6a15537
|
62 63 64 65 |
try { matrix.buddies[jid]['resources'][resource] = { state: state, statusText: statusText, |
9d69d361f
|
66 |
last_update: moment().format(momentFormat) |
ab6a15537
|
67 |
} |
70b9ea66b
|
68 |
} |
ab6a15537
|
69 70 71 |
catch(e) { logger.warn('MatrixUtil: Exception on update resources on matrix', {jid: jid, state: state, statusText: statusText, resource: resource}); } |
448f6cf8b
|
72 |
if (resource != 'undefined' && matrix.buddies[jid].resources['undefined']) { |
70b9ea66b
|
73 |
try { |
9ca4bb3b6
|
74 |
delete matrix.buddies[jid].resources['undefined']; |
70b9ea66b
|
75 76 |
} catch(e) {}; |
ab6a15537
|
77 |
} |
70b9ea66b
|
78 |
} |
ddffb312f
|
79 |
|
ddffb312f
|
80 |
MatrixUtil.prototype.isPartnerOffline = function(partner) { |
f7594efa6
|
81 |
if (!partner) { return; } |
0a0dd5297
|
82 83 |
partner = _cleanPartnerId(partner); |
f7594efa6
|
84 |
|
93a0e5644
|
85 86 |
let matrix = this.matrix; let logger = this.logger; |
ddffb312f
|
87 88 |
if (!matrix) { return false; } |
24071b44e
|
89 90 |
if (!matrix.buddies[partner]) { return true; } if (!matrix.buddies[partner].resources) { return true; }; |
ddffb312f
|
91 |
|
93a0e5644
|
92 93 |
let resources = matrix.buddies[partner].resources; for (let key in resources) { |
ddffb312f
|
94 |
if (resources.hasOwnProperty(key)) { |
93a0e5644
|
95 |
let resource = resources[key]; |
ddffb312f
|
96 97 98 99 100 101 102 103 |
if (resources[key].state == 'online') { return false; } } } logger.verbose('Offline partner detected: ' + partner); return true; } |
c3f61306a
|
104 |
|
94a22ccda
|
105 |
MatrixUtil.prototype._updateLastResponseTime = function(partner) { |
7d5f67170
|
106 |
let matrix = this.matrix; |
b748823dd
|
107 |
let logger = this.logger; |
7d5f67170
|
108 |
|
285a6d184
|
109 110 |
if (!matrix.buddies[partner]['last_outgoing']) { logger.verbose('No outgoing yet, skip updateLastResponseTime'); |
85428dac4
|
111 |
return; |
7d5f67170
|
112 |
} |
285a6d184
|
113 114 |
if (!matrix.buddies[partner]['last_outgoing']['last_update_ts']) { logger.verbose('No outgoing timestamp yet, skip updateLastResponseTime'); |
85428dac4
|
115 |
return; |
7d5f67170
|
116 |
} |
285a6d184
|
117 118 119 120 121 |
if ( matrix.buddies[partner]['last_incoming'] && (Number(matrix.buddies[partner]['last_incoming']['last_update_ts']) > Number(matrix.buddies[partner]['last_outgoing']['last_update_ts'])) ) { return; |
7d5f67170
|
122 |
} |
285a6d184
|
123 |
let delta = Date.now() - Number(matrix.buddies[partner]['last_outgoing']['last_update_ts']); |
97aef7616
|
124 125 126 |
delta = (delta / 1000).toFixed(2); logger.verbose('MatrixUtil: Response time in ' + delta + ' seconds', {partner: partner}); matrix.buddies[partner]['last_response_time_in_secs'] = delta; |
7d5f67170
|
127 |
} |
b2a87e63e
|
128 |
MatrixUtil.prototype._updateLastMessage = function(partner, msg, direction) { |
0a0dd5297
|
129 130 |
if (!partner) { return; } partner = _cleanPartnerId(partner); |
f7594efa6
|
131 |
|
93a0e5644
|
132 |
let matrix = this.matrix; |
7d5f67170
|
133 |
let logger = this.logger; |
c3f61306a
|
134 135 136 137 138 139 140 141 |
if (!matrix) { return; } if (!matrix.buddies) { matrix.buddies = {}; } |
0a0dd5297
|
142 143 |
if (!matrix.buddies[partner]) { matrix.buddies[partner] = {}; |
c3f61306a
|
144 |
} |
7d5f67170
|
145 146 |
if (direction == 'incoming') { try { |
6dedd7620
|
147 |
this._updateLastResponseTime(partner); |
7d5f67170
|
148 149 150 151 152 |
} catch(e) { logger.warn('Exception when updateLastResponseTime', {err: e}); } } |
e857c8e69
|
153 |
matrix.buddies[partner]['waiting_for_response'] = (direction == 'outgoing'); |
6a57e07ac
|
154 |
matrix.buddies[partner]['last_' + direction] = { |
c3f61306a
|
155 |
msg: msg, |
9d69d361f
|
156 157 |
last_update: moment().format(momentFormat), last_update_ts: Date.now() |
c3f61306a
|
158 |
} |
7d5f67170
|
159 160 161 162 |
if (direction == 'outgoing') { return; } |
c3f61306a
|
163 |
} |
c3f61306a
|
164 |
|
b2a87e63e
|
165 166 167 |
MatrixUtil.prototype.updateLastIncoming = function(partner, msg) { this._updateLastMessage(partner, msg, 'incoming'); } |
c3f61306a
|
168 |
|
b2a87e63e
|
169 170 |
MatrixUtil.prototype.updateLastOutgoing = function(partner, msg) { this._updateLastMessage(partner, msg, 'outgoing'); |
c3f61306a
|
171 |
} |