Commit 6dedd762039a274d1f717b471a793b1f10b0b47d

Authored by Adhidarma Hadiwinoto
1 parent 85428dac40
Exists in master

fix forget this

Showing 1 changed file with 1 additions and 3 deletions Inline Diff

1 'use strict'; 1 'use strict';
2 2
3 var moment = require('moment'); 3 var moment = require('moment');
4 var momentFormat = 'YYYY-MM-DD HH:mm:ss'; 4 var momentFormat = 'YYYY-MM-DD HH:mm:ss';
5 5
6 module.exports = MatrixUtil; 6 module.exports = MatrixUtil;
7 7
8 function _cleanPartnerId(partnerId) { 8 function _cleanPartnerId(partnerId) {
9 let cleaned = partnerId; 9 let cleaned = partnerId;
10 10
11 try { 11 try {
12 cleaned = cleaned.toLocaleString(); 12 cleaned = cleaned.toLocaleString();
13 cleaned = cleaned.trim().toLowerCase(); 13 cleaned = cleaned.trim().toLowerCase();
14 } catch(e) { 14 } catch(e) {
15 return partnerId; 15 return partnerId;
16 } 16 }
17 17
18 return cleaned; 18 return cleaned;
19 } 19 }
20 20
21 function MatrixUtil(options) { 21 function MatrixUtil(options) {
22 if (!options) { 22 if (!options) {
23 console.trace('Undefined options'); 23 console.trace('Undefined options');
24 process.exit(1); 24 process.exit(1);
25 } 25 }
26 26
27 this.matrix = options.matrix; 27 this.matrix = options.matrix;
28 if (!this.matrix) { 28 if (!this.matrix) {
29 console.trace("Matrix not set"); 29 console.trace("Matrix not set");
30 process.exit(1); 30 process.exit(1);
31 } 31 }
32 32
33 this.logger = options.logger; 33 this.logger = options.logger;
34 if (!this.logger) { 34 if (!this.logger) {
35 console.trace("Logger not set"); 35 console.trace("Logger not set");
36 process.exit(1); 36 process.exit(1);
37 } 37 }
38 } 38 }
39 39
40 MatrixUtil.prototype.updateBuddyState = function(jid, state, statusText, resource) { 40 MatrixUtil.prototype.updateBuddyState = function(jid, state, statusText, resource) {
41 if (!jid) {return; } 41 if (!jid) {return; }
42 if (jid == 'undefined') {return; } 42 if (jid == 'undefined') {return; }
43 43
44 jid = _cleanPartnerId(jid); 44 jid = _cleanPartnerId(jid);
45 45
46 if (!resource) { 46 if (!resource) {
47 resource = 'undefined'; 47 resource = 'undefined';
48 } 48 }
49 49
50 let logger = this.logger; 50 let logger = this.logger;
51 let matrix = this.matrix; 51 let matrix = this.matrix;
52 52
53 logger.verbose('Buddy state change', {jid: jid, state: state, statusText: statusText, resource: resource}); 53 logger.verbose('Buddy state change', {jid: jid, state: state, statusText: statusText, resource: resource});
54 54
55 if (!matrix) { 55 if (!matrix) {
56 return; 56 return;
57 } 57 }
58 58
59 if (!matrix.buddies) { 59 if (!matrix.buddies) {
60 matrix.buddies = {}; 60 matrix.buddies = {};
61 } 61 }
62 62
63 if (!matrix.buddies[jid]) { 63 if (!matrix.buddies[jid]) {
64 matrix.buddies[jid] = {resources: {}}; 64 matrix.buddies[jid] = {resources: {}};
65 } 65 }
66 66
67 try { 67 try {
68 matrix.buddies[jid]['resources'][resource] = { 68 matrix.buddies[jid]['resources'][resource] = {
69 state: state, 69 state: state,
70 statusText: statusText, 70 statusText: statusText,
71 last_update: moment().format(momentFormat) 71 last_update: moment().format(momentFormat)
72 } 72 }
73 } 73 }
74 catch(e) { 74 catch(e) {
75 logger.warn('MatrixUtil: Exception on update resources on matrix', {jid: jid, state: state, statusText: statusText, resource: resource}); 75 logger.warn('MatrixUtil: Exception on update resources on matrix', {jid: jid, state: state, statusText: statusText, resource: resource});
76 } 76 }
77 77
78 if (resource != 'undefined' && matrix.buddies[jid].resources['undefined']) { 78 if (resource != 'undefined' && matrix.buddies[jid].resources['undefined']) {
79 try { 79 try {
80 delete matrix.buddies[jid].resources['undefined']; 80 delete matrix.buddies[jid].resources['undefined'];
81 } 81 }
82 catch(e) {}; 82 catch(e) {};
83 } 83 }
84 } 84 }
85 85
86 MatrixUtil.prototype.isAFriend = function(jid) { 86 MatrixUtil.prototype.isAFriend = function(jid) {
87 if (!jid) { return; } 87 if (!jid) { return; }
88 88
89 jid = _cleanPartnerId(jid); 89 jid = _cleanPartnerId(jid);
90 90
91 let matrix = this.matrix; 91 let matrix = this.matrix;
92 92
93 if (!matrix) { return false; }; 93 if (!matrix) { return false; };
94 if (!matrix.buddies) { return false; } 94 if (!matrix.buddies) { return false; }
95 if (!matrix.buddies[jid]) { return false; } 95 if (!matrix.buddies[jid]) { return false; }
96 96
97 return true; 97 return true;
98 } 98 }
99 99
100 MatrixUtil.prototype.isPartnerOffline = function(partner) { 100 MatrixUtil.prototype.isPartnerOffline = function(partner) {
101 if (!partner) { return; } 101 if (!partner) { return; }
102 102
103 partner = _cleanPartnerId(partner); 103 partner = _cleanPartnerId(partner);
104 104
105 let matrix = this.matrix; 105 let matrix = this.matrix;
106 let logger = this.logger; 106 let logger = this.logger;
107 107
108 if (!matrix) { return false; } 108 if (!matrix) { return false; }
109 109
110 if (!matrix.buddies[partner]) { return false; } 110 if (!matrix.buddies[partner]) { return false; }
111 if (!matrix.buddies[partner].resources) { return false; }; 111 if (!matrix.buddies[partner].resources) { return false; };
112 112
113 let resources = matrix.buddies[partner].resources; 113 let resources = matrix.buddies[partner].resources;
114 for (let key in resources) { 114 for (let key in resources) {
115 if (resources.hasOwnProperty(key)) { 115 if (resources.hasOwnProperty(key)) {
116 let resource = resources[key]; 116 let resource = resources[key];
117 if (resources[key].state == 'online') { 117 if (resources[key].state == 'online') {
118 return false; 118 return false;
119 } 119 }
120 } 120 }
121 } 121 }
122 logger.verbose('Offline partner detected: ' + partner); 122 logger.verbose('Offline partner detected: ' + partner);
123 return true; 123 return true;
124 } 124 }
125 125
126 MatrixUtil.prototype._updateLastResponseTime = function(partner) { 126 MatrixUtil.prototype._updateLastResponseTime = function(partner) {
127 let matrix = this.matrix; 127 let matrix = this.matrix;
128 let logger = this.logger; 128 let logger = this.logger;
129 129
130 try { 130 try {
131 if (!matrix.buddies[partner]['last_outgoing']) { 131 if (!matrix.buddies[partner]['last_outgoing']) {
132 logger.verbose('No outgoing yet, skip updateLastResponseTime'); 132 logger.verbose('No outgoing yet, skip updateLastResponseTime');
133 return; 133 return;
134 } 134 }
135 135
136 if (!matrix.buddies[partner]['last_outgoing']['last_update_ts']) { 136 if (!matrix.buddies[partner]['last_outgoing']['last_update_ts']) {
137 logger.verbose('No outgoing timestamp yet, skip updateLastResponseTime'); 137 logger.verbose('No outgoing timestamp yet, skip updateLastResponseTime');
138 return; 138 return;
139 } 139 }
140 } 140 }
141 catch(e) { 141 catch(e) {
142 logger.warn('Exception when preparing updateLastResponseTime', {err: e}); 142 logger.warn('Exception when preparing updateLastResponseTime', {err: e});
143 return; 143 return;
144 } 144 }
145 145
146 try { 146 try {
147 if ( 147 if (
148 matrix.buddies[partner]['last_incoming'] 148 matrix.buddies[partner]['last_incoming']
149 && (Number(matrix.buddies[partner]['last_incoming']['last_update_ts']) > Number(matrix.buddies[partner]['last_outgoing']['last_update_ts'])) 149 && (Number(matrix.buddies[partner]['last_incoming']['last_update_ts']) > Number(matrix.buddies[partner]['last_outgoing']['last_update_ts']))
150 ) { 150 ) {
151 return; 151 return;
152 } 152 }
153 } 153 }
154 catch(e) { 154 catch(e) {
155 logger.warn('Exception when checking if last_incoming > last_outgoing', {err: e}); 155 logger.warn('Exception when checking if last_incoming > last_outgoing', {err: e});
156 return; 156 return;
157 } 157 }
158 158
159 159
160 try { 160 try {
161 let delta = Date.now() - Number(matrix.buddies[partner]['last_outgoing']['last_update_ts']); 161 let delta = Date.now() - Number(matrix.buddies[partner]['last_outgoing']['last_update_ts']);
162 logger.verbose('Response time in ' + delta + 'ms'); 162 logger.verbose('Response time in ' + delta + 'ms');
163 matrix.buddies[partner]['last_response_time'] = Math.round(delta/1000); 163 matrix.buddies[partner]['last_response_time'] = Math.round(delta/1000);
164 } 164 }
165 catch(e) { 165 catch(e) {
166 logger.warn('Exception when calculating last_response_time', {err: e}); 166 logger.warn('Exception when calculating last_response_time', {err: e});
167 } 167 }
168 168
169 } 169 }
170 170
171 MatrixUtil.prototype._updateLastMessage = function(partner, msg, direction) { 171 MatrixUtil.prototype._updateLastMessage = function(partner, msg, direction) {
172 if (!partner) { return; } 172 if (!partner) { return; }
173 partner = _cleanPartnerId(partner); 173 partner = _cleanPartnerId(partner);
174 174
175 let matrix = this.matrix; 175 let matrix = this.matrix;
176 let logger = this.logger; 176 let logger = this.logger;
177 177
178 if (!matrix) { 178 if (!matrix) {
179 return; 179 return;
180 } 180 }
181 181
182 if (!matrix.buddies) { 182 if (!matrix.buddies) {
183 matrix.buddies = {}; 183 matrix.buddies = {};
184 } 184 }
185 185
186 if (!matrix.buddies[partner]) { 186 if (!matrix.buddies[partner]) {
187 matrix.buddies[partner] = {}; 187 matrix.buddies[partner] = {};
188 } 188 }
189 189
190 if (direction == 'incoming') { 190 if (direction == 'incoming') {
191 try { 191 try {
192 _updateLastResponseTime(partner); 192 this._updateLastResponseTime(partner);
193 } 193 }
194 catch(e) { 194 catch(e) {
195 logger.warn('Exception when updateLastResponseTime', {err: e}); 195 logger.warn('Exception when updateLastResponseTime', {err: e});
196 } 196 }
197 } 197 }
198 198
199 matrix.buddies[partner]['last_' + direction] = { 199 matrix.buddies[partner]['last_' + direction] = {
200 msg: msg, 200 msg: msg,
201 last_update: moment().format(momentFormat), 201 last_update: moment().format(momentFormat),
202 last_update_ts: Date.now() 202 last_update_ts: Date.now()
203 } 203 }
204 204
205 if (direction == 'outgoing') { 205 if (direction == 'outgoing') {
206 return; 206 return;
207 } 207 }
208
209
210 } 208 }
211 209
212 210
213 MatrixUtil.prototype.updateLastIncoming = function(partner, msg) { 211 MatrixUtil.prototype.updateLastIncoming = function(partner, msg) {
214 this._updateLastMessage(partner, msg, 'incoming'); 212 this._updateLastMessage(partner, msg, 'incoming');
215 } 213 }
216 214
217 MatrixUtil.prototype.updateLastOutgoing = function(partner, msg) { 215 MatrixUtil.prototype.updateLastOutgoing = function(partner, msg) {
218 this._updateLastMessage(partner, msg, 'outgoing'); 216 this._updateLastMessage(partner, msg, 'outgoing');
219 } 217 }
220 218