Blame view

matrix-util.js 4.69 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

ddffb312f   Adhidarma Hadiwinoto   tambah teman jika...
80
  MatrixUtil.prototype.isPartnerOffline = function(partner) {
f7594efa6   Adhidarma Hadiwinoto   toLowerCase
81
      if (!partner) { return; }
0a0dd5297   Adhidarma Hadiwinoto   _cleanPartnerId
82
83
  
      partner = _cleanPartnerId(partner);
f7594efa6   Adhidarma Hadiwinoto   toLowerCase
84

93a0e5644   Adhidarma Hadiwinoto   strict mode
85
86
      let matrix = this.matrix;
      let logger = this.logger;
ddffb312f   Adhidarma Hadiwinoto   tambah teman jika...
87
88
  
      if (!matrix) { return false; }
24071b44e   Adhidarma Hadiwinoto   teman tidak terda...
89
90
      if (!matrix.buddies[partner]) { return true; }
      if (!matrix.buddies[partner].resources) { return true; };
ddffb312f   Adhidarma Hadiwinoto   tambah teman jika...
91

93a0e5644   Adhidarma Hadiwinoto   strict mode
92
93
      let resources = matrix.buddies[partner].resources;
      for (let key in resources) {
ddffb312f   Adhidarma Hadiwinoto   tambah teman jika...
94
          if (resources.hasOwnProperty(key)) {
93a0e5644   Adhidarma Hadiwinoto   strict mode
95
              let resource = resources[key];
ddffb312f   Adhidarma Hadiwinoto   tambah teman jika...
96
97
98
99
100
101
102
103
              if (resources[key].state == 'online') {
                  return false;
              }
          }
      }
      logger.verbose('Offline partner detected: ' + partner);
      return true;
  }
c3f61306a   Adhidarma Hadiwinoto   migrate matrix to...
104

94a22ccda   Adhidarma Hadiwinoto   typo
105
  MatrixUtil.prototype._updateLastResponseTime = function(partner) {
7d5f67170   Adhidarma Hadiwinoto   updateLastRespons...
106
      let matrix = this.matrix;
b748823dd   Adhidarma Hadiwinoto   delta
107
      let logger = this.logger;
7d5f67170   Adhidarma Hadiwinoto   updateLastRespons...
108

285a6d184   Adhidarma Hadiwinoto   last_response_tim...
109
110
      if (!matrix.buddies[partner]['last_outgoing']) {
          logger.verbose('No outgoing yet, skip updateLastResponseTime');
85428dac4   Adhidarma Hadiwinoto   return if Exception
111
          return;
7d5f67170   Adhidarma Hadiwinoto   updateLastRespons...
112
      }
285a6d184   Adhidarma Hadiwinoto   last_response_tim...
113
114
      if (!matrix.buddies[partner]['last_outgoing']['last_update_ts']) {
          logger.verbose('No outgoing timestamp yet, skip updateLastResponseTime');
85428dac4   Adhidarma Hadiwinoto   return if Exception
115
          return;
7d5f67170   Adhidarma Hadiwinoto   updateLastRespons...
116
      }
285a6d184   Adhidarma Hadiwinoto   last_response_tim...
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   Adhidarma Hadiwinoto   updateLastRespons...
122
      }
285a6d184   Adhidarma Hadiwinoto   last_response_tim...
123
      let delta = Date.now() - Number(matrix.buddies[partner]['last_outgoing']['last_update_ts']);
97aef7616   Adhidarma Hadiwinoto   delta.toFixed() i...
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   Adhidarma Hadiwinoto   updateLastRespons...
127
  }
b2a87e63e   Adhidarma Hadiwinoto   _updateLastMessage
128
  MatrixUtil.prototype._updateLastMessage = function(partner, msg, direction) {
0a0dd5297   Adhidarma Hadiwinoto   _cleanPartnerId
129
130
      if (!partner) { return; }
      partner = _cleanPartnerId(partner);
f7594efa6   Adhidarma Hadiwinoto   toLowerCase
131

93a0e5644   Adhidarma Hadiwinoto   strict mode
132
      let matrix = this.matrix;
7d5f67170   Adhidarma Hadiwinoto   updateLastRespons...
133
      let logger = this.logger;
c3f61306a   Adhidarma Hadiwinoto   migrate matrix to...
134
135
136
137
138
139
140
141
  
      if (!matrix) {
          return;
      }
  
      if (!matrix.buddies) {
          matrix.buddies = {};
      }
0a0dd5297   Adhidarma Hadiwinoto   _cleanPartnerId
142
143
      if (!matrix.buddies[partner]) {
          matrix.buddies[partner] = {};
c3f61306a   Adhidarma Hadiwinoto   migrate matrix to...
144
      }
7d5f67170   Adhidarma Hadiwinoto   updateLastRespons...
145
146
      if (direction == 'incoming') {
          try {
6dedd7620   Adhidarma Hadiwinoto   fix forget this
147
              this._updateLastResponseTime(partner);
7d5f67170   Adhidarma Hadiwinoto   updateLastRespons...
148
149
150
151
152
          }
          catch(e) {
              logger.warn('Exception when updateLastResponseTime', {err: e});
          }
      }
e857c8e69   Adhidarma Hadiwinoto   matrix waiting_fo...
153
      matrix.buddies[partner]['waiting_for_response'] = (direction == 'outgoing');
6a57e07ac   Adhidarma Hadiwinoto   perbaikan salah n...
154
      matrix.buddies[partner]['last_' + direction] = {
c3f61306a   Adhidarma Hadiwinoto   migrate matrix to...
155
          msg: msg,
9d69d361f   Adhidarma Hadiwinoto   momentFormat
156
157
          last_update: moment().format(momentFormat),
          last_update_ts: Date.now()
c3f61306a   Adhidarma Hadiwinoto   migrate matrix to...
158
      }
7d5f67170   Adhidarma Hadiwinoto   updateLastRespons...
159
160
161
162
  
      if (direction == 'outgoing') {
          return;
      }
c3f61306a   Adhidarma Hadiwinoto   migrate matrix to...
163
  }
c3f61306a   Adhidarma Hadiwinoto   migrate matrix to...
164

b2a87e63e   Adhidarma Hadiwinoto   _updateLastMessage
165
166
167
  MatrixUtil.prototype.updateLastIncoming = function(partner, msg) {
      this._updateLastMessage(partner, msg, 'incoming');
  }
c3f61306a   Adhidarma Hadiwinoto   migrate matrix to...
168

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