@@ -91,6 +91,8 @@ class Messages {
91
91
update ( msg_ids = null ) {
92
92
console . debug ( "Messages.update(msg_ids=" + JSON . stringify ( msg_ids ) + " )" ) ;
93
93
94
+ let message_checksum = 0 ;
95
+
94
96
if ( msg_ids === null ) {
95
97
msg_ids = Array . from ( this . messages . keys ( ) ) ;
96
98
}
@@ -114,6 +116,11 @@ class Messages {
114
116
this . __channels . push ( message . channel ) ;
115
117
}
116
118
119
+ // add this message to the checksum
120
+ if ( message . channel == this . __current_channel ) {
121
+ message_checksum += parseInt ( message . id , 16 ) ;
122
+ }
123
+
117
124
this . messages . set ( id , message ) ;
118
125
}
119
126
@@ -124,11 +131,28 @@ class Messages {
124
131
let b_msg = this . messages . get ( b ) ;
125
132
return a_msg . epoch > b_msg . epoch ? - 1 : 1 ;
126
133
} ) ;
134
+
135
+ // this._message_checksum == null is the first rendering of the
136
+ // message table. No need to sound an alert.
137
+ if ( this . _message_checksum != null && message_checksum != this . _message_checksum ) {
138
+ // reset internal message checksum and notify of new messages
139
+ this . notify ( Messages . NEW_MSG ) ;
140
+ this . _message_checksum = message_checksum ;
141
+ }
127
142
}
128
143
129
144
set_channel ( chan ) {
130
145
console . debug ( "Messages.set_channel(chan=" + chan + ")" ) ;
131
146
this . __current_channel = chan ;
147
+
148
+ // need to recalculate the message checksum
149
+ let message_checksum = 0 ;
150
+ for ( var id of this . message_order ) {
151
+ let message = this . messages . get ( id ) ;
152
+ if ( message . channel == chan ) {
153
+ message_checksum += parseInt ( message . id , 16 ) ;
154
+ }
155
+ }
132
156
}
133
157
134
158
current_channel ( ) {
@@ -203,8 +227,6 @@ class Messages {
203
227
console . debug ( "Messages.render(channel=" + channel + ", search_filter=" + search_filter + ")" ) ;
204
228
let html = '' ;
205
229
let search = search_filter . toLowerCase ( ) ;
206
- // compare with last time render was called to detect new messages
207
- let message_checksum = 0 ;
208
230
209
231
for ( var id of this . message_order ) {
210
232
var message = this . messages . get ( id ) ;
@@ -226,22 +248,10 @@ class Messages {
226
248
}
227
249
228
250
if ( channel == message . channel || this . __channel == '' ) {
229
- message_checksum += parseInt ( id , 16 ) ;
230
251
html += this . render_row ( message ) ;
231
252
}
232
253
}
233
254
234
- // this._message_checksum == null is the first rendering of the
235
- // message table. No need to sound an alert.
236
- /* TODO checksum is not working as expected and the audio alert
237
- is played twice when a new message is entered locally
238
- and when changing channels */
239
- if ( this . _message_checksum != null && message_checksum != this . _message_checksum ) {
240
- // reset internal message checksum and notify of new messages
241
- this . notify ( Messages . NEW_MSG ) ;
242
- }
243
- this . _message_checksum = message_checksum ;
244
-
245
255
// provide a message if no messages were found
246
256
if ( html == "" ) {
247
257
html = "<tr><td>No messages found</td></tr>" ;
0 commit comments