Blame view

matrix-util.js 4.96 KB
93a0e5644   Adhidarma Hadiwinoto   strict mode
1
  'use strict';
70b9ea66b   Adhidarma Hadiwinoto   coba matrix-util
2
  var moment = require('moment');
9d69d361f   Adhidarma Hadiwinoto   momentFormat
3
  var momentFormat = 'YYYY-MM-DD HH:mm:ss';
70b9ea66b   Adhidarma Hadiwinoto   coba matrix-util
4
5
  
  module.exports = MatrixUtil;
0a0dd5297   Adhidarma Hadiwinoto   _cleanPartnerId
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   Adhidarma Hadiwinoto   coba matrix-util
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   Adhidarma Hadiwinoto   toLowerCase
38
      if (!jid) {return; }
70b9ea66b   Adhidarma Hadiwinoto   coba matrix-util
39
      if (jid == 'undefined') {return; }
637ced97f   Adhidarma Hadiwinoto   toLocaleString
40

0a0dd5297   Adhidarma Hadiwinoto   _cleanPartnerId
41
      jid = _cleanPartnerId(jid);
70b9ea66b   Adhidarma Hadiwinoto   coba matrix-util
42

bd0c80ebf   Adhidarma Hadiwinoto   penanganan undefi...
43
44
45
      if (!resource) {
          resource = 'undefined';
      }
93a0e5644   Adhidarma Hadiwinoto   strict mode
46
47
      let logger = this.logger;
      let matrix = this.matrix;
70b9ea66b   Adhidarma Hadiwinoto   coba matrix-util
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   Adhidarma Hadiwinoto   tambah try catch ...
62
63
64
65
      try {
          matrix.buddies[jid]['resources'][resource] = {
              state: state,
              statusText: statusText,
9d69d361f   Adhidarma Hadiwinoto   momentFormat
66
              last_update: moment().format(momentFormat)
ab6a15537   Adhidarma Hadiwinoto   tambah try catch ...
67
          }
70b9ea66b   Adhidarma Hadiwinoto   coba matrix-util
68
      }
ab6a15537   Adhidarma Hadiwinoto   tambah try catch ...
69
70
71
      catch(e) {
          logger.warn('MatrixUtil: Exception on update resources on matrix', {jid: jid, state: state, statusText: statusText, resource: resource});
      }
448f6cf8b   Adhidarma Hadiwinoto   coba perbaikan
72
      if (resource != 'undefined' && matrix.buddies[jid].resources['undefined']) {
70b9ea66b   Adhidarma Hadiwinoto   coba matrix-util
73
          try {
9ca4bb3b6   Adhidarma Hadiwinoto   hapus kelebihan t...
74
              delete matrix.buddies[jid].resources['undefined'];
70b9ea66b   Adhidarma Hadiwinoto   coba matrix-util
75
76
          }
          catch(e) {};
ab6a15537   Adhidarma Hadiwinoto   tambah try catch ...
77
          }
70b9ea66b   Adhidarma Hadiwinoto   coba matrix-util
78
  }
ddffb312f   Adhidarma Hadiwinoto   tambah teman jika...
79
80
  
  MatrixUtil.prototype.isAFriend = function(jid) {
f7594efa6   Adhidarma Hadiwinoto   toLowerCase
81
      if (!jid) { return; }
0a0dd5297   Adhidarma Hadiwinoto   _cleanPartnerId
82
83
  
      jid = _cleanPartnerId(jid);
f7594efa6   Adhidarma Hadiwinoto   toLowerCase
84

93a0e5644   Adhidarma Hadiwinoto   strict mode
85
      let matrix = this.matrix;
ddffb312f   Adhidarma Hadiwinoto   tambah teman jika...
86
87
88
89
90
91
92
93
94
  
      if (!matrix) { return false; };
      if (!matrix.buddies) { return false; }
      if (!matrix.buddies[jid]) { return false; }
  
      return true;
  }
  
  MatrixUtil.prototype.isPartnerOffline = function(partner) {
f7594efa6   Adhidarma Hadiwinoto   toLowerCase
95
      if (!partner) { return; }
0a0dd5297   Adhidarma Hadiwinoto   _cleanPartnerId
96
97
  
      partner = _cleanPartnerId(partner);
f7594efa6   Adhidarma Hadiwinoto   toLowerCase
98

93a0e5644   Adhidarma Hadiwinoto   strict mode
99
100
      let matrix = this.matrix;
      let logger = this.logger;
ddffb312f   Adhidarma Hadiwinoto   tambah teman jika...
101
102
103
104
105
  
      if (!matrix) { return false; }
  
      if (!matrix.buddies[partner]) { return false; }
      if (!matrix.buddies[partner].resources) { return false; };
93a0e5644   Adhidarma Hadiwinoto   strict mode
106
107
      let resources = matrix.buddies[partner].resources;
      for (let key in resources) {
ddffb312f   Adhidarma Hadiwinoto   tambah teman jika...
108
          if (resources.hasOwnProperty(key)) {
93a0e5644   Adhidarma Hadiwinoto   strict mode
109
              let resource = resources[key];
ddffb312f   Adhidarma Hadiwinoto   tambah teman jika...
110
111
112
113
114
115
116
117
              if (resources[key].state == 'online') {
                  return false;
              }
          }
      }
      logger.verbose('Offline partner detected: ' + partner);
      return true;
  }
c3f61306a   Adhidarma Hadiwinoto   migrate matrix to...
118

94a22ccda   Adhidarma Hadiwinoto   typo
119
  MatrixUtil.prototype._updateLastResponseTime = function(partner) {
7d5f67170   Adhidarma Hadiwinoto   updateLastRespons...
120
      let matrix = this.matrix;
b748823dd   Adhidarma Hadiwinoto   delta
121
      let logger = this.logger;
7d5f67170   Adhidarma Hadiwinoto   updateLastRespons...
122

285a6d184   Adhidarma Hadiwinoto   last_response_tim...
123
124
      if (!matrix.buddies[partner]['last_outgoing']) {
          logger.verbose('No outgoing yet, skip updateLastResponseTime');
85428dac4   Adhidarma Hadiwinoto   return if Exception
125
          return;
7d5f67170   Adhidarma Hadiwinoto   updateLastRespons...
126
      }
285a6d184   Adhidarma Hadiwinoto   last_response_tim...
127
128
      if (!matrix.buddies[partner]['last_outgoing']['last_update_ts']) {
          logger.verbose('No outgoing timestamp yet, skip updateLastResponseTime');
85428dac4   Adhidarma Hadiwinoto   return if Exception
129
          return;
7d5f67170   Adhidarma Hadiwinoto   updateLastRespons...
130
      }
285a6d184   Adhidarma Hadiwinoto   last_response_tim...
131
132
133
134
135
      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   Adhidarma Hadiwinoto   updateLastRespons...
136
      }
285a6d184   Adhidarma Hadiwinoto   last_response_tim...
137
      let delta = Date.now() - Number(matrix.buddies[partner]['last_outgoing']['last_update_ts']);
453bc7f72   Adhidarma Hadiwinoto   response time in ...
138
139
140
      delta = delta / 1000;
      logger.verbose('Response time in ' + delta + ' seconds');
      matrix.buddies[partner]['last_response_time_in_secs'] = Math.round(delta * 100) / 100;
7d5f67170   Adhidarma Hadiwinoto   updateLastRespons...
141
  }
b2a87e63e   Adhidarma Hadiwinoto   _updateLastMessage
142
  MatrixUtil.prototype._updateLastMessage = function(partner, msg, direction) {
0a0dd5297   Adhidarma Hadiwinoto   _cleanPartnerId
143
144
      if (!partner) { return; }
      partner = _cleanPartnerId(partner);
f7594efa6   Adhidarma Hadiwinoto   toLowerCase
145

93a0e5644   Adhidarma Hadiwinoto   strict mode
146
      let matrix = this.matrix;
7d5f67170   Adhidarma Hadiwinoto   updateLastRespons...
147
      let logger = this.logger;
c3f61306a   Adhidarma Hadiwinoto   migrate matrix to...
148
149
150
151
152
153
154
155
  
      if (!matrix) {
          return;
      }
  
      if (!matrix.buddies) {
          matrix.buddies = {};
      }
0a0dd5297   Adhidarma Hadiwinoto   _cleanPartnerId
156
157
      if (!matrix.buddies[partner]) {
          matrix.buddies[partner] = {};
c3f61306a   Adhidarma Hadiwinoto   migrate matrix to...
158
      }
7d5f67170   Adhidarma Hadiwinoto   updateLastRespons...
159
160
      if (direction == 'incoming') {
          try {
6dedd7620   Adhidarma Hadiwinoto   fix forget this
161
              this._updateLastResponseTime(partner);
7d5f67170   Adhidarma Hadiwinoto   updateLastRespons...
162
163
164
165
166
          }
          catch(e) {
              logger.warn('Exception when updateLastResponseTime', {err: e});
          }
      }
e857c8e69   Adhidarma Hadiwinoto   matrix waiting_fo...
167
      matrix.buddies[partner]['waiting_for_response'] = (direction == 'outgoing');
6a57e07ac   Adhidarma Hadiwinoto   perbaikan salah n...
168
      matrix.buddies[partner]['last_' + direction] = {
c3f61306a   Adhidarma Hadiwinoto   migrate matrix to...
169
          msg: msg,
9d69d361f   Adhidarma Hadiwinoto   momentFormat
170
171
          last_update: moment().format(momentFormat),
          last_update_ts: Date.now()
c3f61306a   Adhidarma Hadiwinoto   migrate matrix to...
172
      }
7d5f67170   Adhidarma Hadiwinoto   updateLastRespons...
173
174
175
176
  
      if (direction == 'outgoing') {
          return;
      }
c3f61306a   Adhidarma Hadiwinoto   migrate matrix to...
177
  }
c3f61306a   Adhidarma Hadiwinoto   migrate matrix to...
178

b2a87e63e   Adhidarma Hadiwinoto   _updateLastMessage
179
180
181
  MatrixUtil.prototype.updateLastIncoming = function(partner, msg) {
      this._updateLastMessage(partner, msg, 'incoming');
  }
c3f61306a   Adhidarma Hadiwinoto   migrate matrix to...
182

b2a87e63e   Adhidarma Hadiwinoto   _updateLastMessage
183
184
  MatrixUtil.prototype.updateLastOutgoing = function(partner, msg) {
      this._updateLastMessage(partner, msg, 'outgoing');
c3f61306a   Adhidarma Hadiwinoto   migrate matrix to...
185
  }