Skip to content

Commit

Permalink
fix: Do not show failed messages as delivered (#15816)
Browse files Browse the repository at this point in the history
  • Loading branch information
atomrc committed Sep 14, 2023
1 parent 2754a77 commit 0a76863
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 15 deletions.
12 changes: 6 additions & 6 deletions src/script/conversation/MessageRepository.ts
Expand Up @@ -1215,12 +1215,12 @@ export class MessageRepository {
private async updateMessageAsFailed(conversationEntity: Conversation, eventId: string, error: unknown) {
try {
const messageEntity = await this.getMessageInConversationById(conversationEntity, eventId);
if (isBackendError(error) && error.label === BackendErrorLabel.FEDERATION_REMOTE_ERROR) {
messageEntity.status(StatusType.FEDERATION_ERROR);
return this.eventService.updateEvent(messageEntity.primary_key, {status: StatusType.FEDERATION_ERROR});
}
messageEntity.status(StatusType.FAILED);
return this.eventService.updateEvent(messageEntity.primary_key, {status: StatusType.FAILED});
const errorStatus =
isBackendError(error) && error.label === BackendErrorLabel.FEDERATION_REMOTE_ERROR
? StatusType.FEDERATION_ERROR
: StatusType.FAILED;
messageEntity.status(errorStatus);
return this.eventService.updateEvent(messageEntity.primary_key, {status: errorStatus});
} catch (error) {
if ((error as any).type !== ConversationError.TYPE.MESSAGE_NOT_FOUND) {
throw error;
Expand Down
12 changes: 6 additions & 6 deletions src/script/entity/Conversation.test.ts
Expand Up @@ -298,7 +298,7 @@ describe('Conversation', () => {

describe('getLastDeliveredMessage', () => {
it('returns undefined if conversation has no messages', () => {
expect(conversation_et.getLastDeliveredMessage()).not.toBeDefined();
expect(conversation_et.lastDeliveredMessage()).not.toBeDefined();
});

it('returns last delivered message', () => {
Expand All @@ -311,35 +311,35 @@ describe('Conversation', () => {
sentMessageEntity.status(StatusType.SENT);
conversation_et.addMessage(sentMessageEntity);

expect(conversation_et.getLastDeliveredMessage()).not.toBeDefined();
expect(conversation_et.lastDeliveredMessage()).not.toBeDefined();

const deliveredMessageEntity = new ContentMessage(createUuid());
deliveredMessageEntity.user(selfUserEntity);
deliveredMessageEntity.status(StatusType.DELIVERED);
conversation_et.addMessage(deliveredMessageEntity);

expect(conversation_et.getLastDeliveredMessage()).toBe(deliveredMessageEntity);
expect(conversation_et.lastDeliveredMessage()).toBe(deliveredMessageEntity);

const nextSentMessageEntity = new ContentMessage(createUuid());
nextSentMessageEntity.user(selfUserEntity);
nextSentMessageEntity.status(StatusType.SENT);
conversation_et.addMessage(nextSentMessageEntity);

expect(conversation_et.getLastDeliveredMessage()).toBe(deliveredMessageEntity);
expect(conversation_et.lastDeliveredMessage()).toBe(deliveredMessageEntity);

const nextDeliveredMessageEntity = new ContentMessage(createUuid());
nextDeliveredMessageEntity.user(selfUserEntity);
nextDeliveredMessageEntity.status(StatusType.DELIVERED);
conversation_et.addMessage(nextDeliveredMessageEntity);

expect(conversation_et.getLastDeliveredMessage()).toBe(nextDeliveredMessageEntity);
expect(conversation_et.lastDeliveredMessage()).toBe(nextDeliveredMessageEntity);

const remoteMessageEntity = new ContentMessage(createUuid());
remoteMessageEntity.user(remoteUserEntity);
remoteMessageEntity.status(StatusType.DELIVERED);
conversation_et.addMessage(remoteMessageEntity);

expect(conversation_et.getLastDeliveredMessage()).toBe(nextDeliveredMessageEntity);
expect(conversation_et.lastDeliveredMessage()).toBe(nextDeliveredMessageEntity);
});
});

Expand Down
4 changes: 2 additions & 2 deletions src/script/entity/Conversation.ts
Expand Up @@ -964,12 +964,12 @@ export class Conversation {
/**
* Get the last delivered message.
*/
getLastDeliveredMessage(): Message | undefined {
private getLastDeliveredMessage(): Message | undefined {
return this.messages()
.slice()
.reverse()
.find(messageEntity => {
const isDelivered = messageEntity.status() >= StatusType.DELIVERED;
const isDelivered = [StatusType.DELIVERED, StatusType.SEEN].includes(messageEntity.status());
return isDelivered && messageEntity.user().isMe;
});
}
Expand Down
2 changes: 1 addition & 1 deletion src/script/event/preprocessor/ReceiptsMiddleware.ts
Expand Up @@ -77,7 +77,7 @@ export class ReceiptsMiddleware {
}
}

isMyMessage(originalEvent: EventRecord): boolean {
private isMyMessage(originalEvent: EventRecord): boolean {
return this.userState.self() && this.userState.self().id === originalEvent.from;
}

Expand Down

0 comments on commit 0a76863

Please sign in to comment.