Skip to content

Commit

Permalink
Warn when receiving message update with unknown id (#798)
Browse files Browse the repository at this point in the history
  • Loading branch information
threema-danilo authored and lgrahl committed May 8, 2019
1 parent d8b7920 commit d356d5b
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 3 deletions.
13 changes: 11 additions & 2 deletions src/services/webclient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2885,10 +2885,19 @@ export class WebClientService {
notify = true;
break;
case WebClientService.ARGUMENT_MODE_MODIFIED:
this.messages.update(receiver, msg);
if (!this.messages.update(receiver, msg)) {
const log = `Received message update for unknown message (id ${msg.id})`;
this.$log.error(this.logTag, log);
if (this.config.DEBUG) {
this.messages.addStatusMessage(receiver, 'Warning: ' + log);
notify = true;
}
}
break;
case WebClientService.ARGUMENT_MODE_REMOVED:
this.messages.remove(receiver, msg.id);
if (!this.messages.remove(receiver, msg.id)) {
this.$log.error(this.logTag, `Received message deletion for unknown message (id ${msg.id})`);
}
notify = true;
break;
default:
Expand Down
1 change: 1 addition & 0 deletions src/threema.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -827,6 +827,7 @@ declare namespace threema {
clearRequested(receiver: BaseReceiver): void;
addNewer(receiver: BaseReceiver, messages: Message[]): void;
addOlder(receiver: BaseReceiver, messages: Message[]): void;
addStatusMessage(receiver: BaseReceiver, text: string): void;
update(receiver: BaseReceiver, message: Message): boolean;
setThumbnail(receiver: BaseReceiver, messageId: string, thumbnailImage: string): boolean;
remove(receiver: BaseReceiver, messageId: string): boolean;
Expand Down
30 changes: 29 additions & 1 deletion src/threema/container.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
* along with Threema Web. If not, see <http://www.gnu.org/licenses/>.
*/

import {copyShallow} from '../helpers';
import {copyShallow, randomString} from '../helpers';
import {isFirstUnreadStatusMessage} from '../message_helpers';
import {ReceiverService} from '../services/receiver';

Expand Down Expand Up @@ -603,6 +603,34 @@ class Messages implements threema.Container.Messages {
receiverMessages.list.unshift.apply(receiverMessages.list, messages);
}

/**
* Insert a new fake status message.
*
* Note: This should probably only be used for debugging.
*/
public addStatusMessage(receiver: threema.BaseReceiver, text: string): void {
// Get reference to message list for the specified receiver
const receiverMessages = this.getReceiverMessages(receiver);

// Determine sort key
const sortKey = receiverMessages.list.length > 0
? receiverMessages.list[receiverMessages.list.length - 1].sortKey
: 0;

// Create fake status message
receiverMessages.list.push({
type: 'status',
id: randomString(6),
body: '',
caption: text,
sortKey: sortKey,
partnerId: receiver.id,
isOutbox: false,
isStatus: true,
statusType: 'text',
});
}

/**
* Update/replace a message with a newer version.
*
Expand Down

0 comments on commit d356d5b

Please sign in to comment.