Show read/viewed even after read receipts disabled

This commit is contained in:
Evan Hahn 2021-07-21 14:21:16 -05:00 committed by GitHub
parent 8bcf3addc7
commit 2c59c71872
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 20 additions and 70 deletions

View file

@ -3850,11 +3850,7 @@ export class ConversationModel extends window.Backbone
(previewMessage ? previewMessage.getNotificationText() : '') || '', (previewMessage ? previewMessage.getNotificationText() : '') || '',
lastMessageStatus: lastMessageStatus:
(previewMessage (previewMessage
? getMessagePropStatus( ? getMessagePropStatus(previewMessage.attributes, ourConversationId)
previewMessage.attributes,
ourConversationId,
window.storage.get('read-receipt-setting', false)
)
: null) || null, : null) || null,
timestamp, timestamp,
lastMessageDeletedForEveryone: previewMessage lastMessageDeletedForEveryone: previewMessage

View file

@ -367,7 +367,6 @@ export class MessageModel extends window.Backbone.Model<MessageAttributesType> {
this.OUR_UUID, this.OUR_UUID,
undefined, undefined,
undefined, undefined,
window.storage.get('read-receipt-setting', false),
window.storage.get('regionCode', 'ZZ'), window.storage.get('regionCode', 'ZZ'),
(identifier?: string) => { (identifier?: string) => {
const state = window.reduxStore.getState(); const state = window.reduxStore.getState();
@ -3336,8 +3335,7 @@ export class MessageModel extends window.Backbone.Model<MessageAttributesType> {
(isIncoming(attributes) || (isIncoming(attributes) ||
getMessagePropStatus( getMessagePropStatus(
attributes, attributes,
window.ConversationController.getOurConversationIdOrThrow(), window.ConversationController.getOurConversationIdOrThrow()
window.storage.get('read-receipt-setting', false)
) !== 'partial-sent') ) !== 'partial-sent')
) { ) {
return undefined; return undefined;

View file

@ -35,7 +35,7 @@ import {
getUserNumber, getUserNumber,
getUserUuid, getUserUuid,
} from './user'; } from './user';
import { getPinnedConversationIds, getReadReceiptSetting } from './items'; import { getPinnedConversationIds } from './items';
import { getPropsForBubble } from './message'; import { getPropsForBubble } from './message';
import { import {
CallSelectorType, CallSelectorType,
@ -671,7 +671,6 @@ export const getMessageSelector = createSelector(
getSelectedMessage, getSelectedMessage,
getConversationSelector, getConversationSelector,
getRegionCode, getRegionCode,
getReadReceiptSetting,
getUserNumber, getUserNumber,
getUserUuid, getUserUuid,
getUserConversationId, getUserConversationId,
@ -684,7 +683,6 @@ export const getMessageSelector = createSelector(
selectedMessage: SelectedMessageType | undefined, selectedMessage: SelectedMessageType | undefined,
conversationSelector: GetConversationByIdType, conversationSelector: GetConversationByIdType,
regionCode: string, regionCode: string,
readReceiptSetting: boolean,
ourNumber: string, ourNumber: string,
ourUuid: string, ourUuid: string,
ourConversationId: string, ourConversationId: string,
@ -705,7 +703,6 @@ export const getMessageSelector = createSelector(
ourNumber, ourNumber,
ourUuid, ourUuid,
regionCode, regionCode,
readReceiptSetting,
selectedMessage ? selectedMessage.id : undefined, selectedMessage ? selectedMessage.id : undefined,
selectedMessage ? selectedMessage.counter : undefined, selectedMessage ? selectedMessage.counter : undefined,
callSelector, callSelector,

View file

@ -20,11 +20,6 @@ export const getUserAgent = createSelector(
(state: ItemsStateType): string => state.userAgent as string (state: ItemsStateType): string => state.userAgent as string
); );
export const getReadReceiptSetting = createSelector(
getItems,
(state: ItemsStateType): boolean => Boolean(state['read-receipt-setting'])
);
export const getPinnedConversationIds = createSelector( export const getPinnedConversationIds = createSelector(
getItems, getItems,
(state: ItemsStateType): Array<string> => (state: ItemsStateType): Array<string> =>

View file

@ -83,7 +83,6 @@ export function getPropsForBubble(
ourNumber: string | undefined, ourNumber: string | undefined,
ourUuid: string | undefined, ourUuid: string | undefined,
regionCode: string, regionCode: string,
readReceiptSetting: boolean,
selectedMessageId: string | undefined, selectedMessageId: string | undefined,
selectedMessageCounter: number | undefined, selectedMessageCounter: number | undefined,
callSelector: CallSelectorType, callSelector: CallSelectorType,
@ -210,7 +209,6 @@ export function getPropsForBubble(
ourUuid, ourUuid,
selectedMessageId, selectedMessageId,
selectedMessageCounter, selectedMessageCounter,
readReceiptSetting,
regionCode, regionCode,
accountSelector accountSelector
), ),
@ -322,7 +320,6 @@ export function getPropsForMessage(
ourUuid: string | undefined, ourUuid: string | undefined,
selectedMessageId: string | undefined, selectedMessageId: string | undefined,
selectedMessageCounter: number | undefined, selectedMessageCounter: number | undefined,
readReceiptSetting: boolean,
regionCode: string, regionCode: string,
accountSelector: (identifier?: string) => boolean accountSelector: (identifier?: string) => boolean
): Omit<PropsForMessage, 'renderingContext'> { ): Omit<PropsForMessage, 'renderingContext'> {
@ -393,11 +390,7 @@ export function getPropsForMessage(
quote: getPropsForQuote(message, conversationSelector, ourConversationId), quote: getPropsForQuote(message, conversationSelector, ourConversationId),
reactions, reactions,
selectedReaction, selectedReaction,
status: getMessagePropStatus( status: getMessagePropStatus(message, ourConversationId),
message,
ourConversationId,
readReceiptSetting
),
text: createNonBreakingLastSeparator(message.body), text: createNonBreakingLastSeparator(message.body),
textPending: message.bodyPending, textPending: message.bodyPending,
timestamp: message.sent_at, timestamp: message.sent_at,
@ -901,8 +894,7 @@ export function getMessagePropStatus(
MessageAttributesType, MessageAttributesType,
'type' | 'errors' | 'sendStateByConversationId' 'type' | 'errors' | 'sendStateByConversationId'
>, >,
ourConversationId: string, ourConversationId: string
readReceiptSetting: boolean
): LastMessageStatus | undefined { ): LastMessageStatus | undefined {
if (!isOutgoing(message)) { if (!isOutgoing(message)) {
return undefined; return undefined;
@ -936,7 +928,7 @@ export function getMessagePropStatus(
if (hasErrors(message)) { if (hasErrors(message)) {
return isSent(highestSuccessfulStatus) ? 'partial-sent' : 'error'; return isSent(highestSuccessfulStatus) ? 'partial-sent' : 'error';
} }
if (readReceiptSetting && isRead(highestSuccessfulStatus)) { if (isRead(highestSuccessfulStatus)) {
return 'read'; return 'read';
} }
if (isDelivered(highestSuccessfulStatus)) { if (isDelivered(highestSuccessfulStatus)) {

View file

@ -146,9 +146,7 @@ describe('state/selectors/messages', () => {
it('returns undefined for incoming messages', () => { it('returns undefined for incoming messages', () => {
const message = createMessage({ type: 'incoming' }); const message = createMessage({ type: 'incoming' });
assert.isUndefined( assert.isUndefined(getMessagePropStatus(message, ourConversationId));
getMessagePropStatus(message, ourConversationId, true)
);
}); });
it('returns "paused" for messages with challenges', () => { it('returns "paused" for messages with challenges', () => {
@ -163,7 +161,7 @@ describe('state/selectors/messages', () => {
const message = createMessage({ errors: [challengeError] }); const message = createMessage({ errors: [challengeError] });
assert.strictEqual( assert.strictEqual(
getMessagePropStatus(message, ourConversationId, true), getMessagePropStatus(message, ourConversationId),
'paused' 'paused'
); );
}); });
@ -188,7 +186,7 @@ describe('state/selectors/messages', () => {
}); });
assert.strictEqual( assert.strictEqual(
getMessagePropStatus(message, ourConversationId, true), getMessagePropStatus(message, ourConversationId),
'partial-sent' 'partial-sent'
); );
}); });
@ -213,7 +211,7 @@ describe('state/selectors/messages', () => {
}); });
assert.strictEqual( assert.strictEqual(
getMessagePropStatus(message, ourConversationId, true), getMessagePropStatus(message, ourConversationId),
'error' 'error'
); );
}); });
@ -228,15 +226,13 @@ describe('state/selectors/messages', () => {
}, },
}); });
[true, false].forEach(readReceiptSetting => {
assert.strictEqual( assert.strictEqual(
getMessagePropStatus(message, ourConversationId, readReceiptSetting), getMessagePropStatus(message, ourConversationId),
'read' 'read'
); );
}); });
});
it('returns "read" if the message was read by at least one person and you have read receipts enabled', () => { it('returns "read" if the message was read by at least one person', () => {
const readMessage = createMessage({ const readMessage = createMessage({
sendStateByConversationId: { sendStateByConversationId: {
[ourConversationId]: { [ourConversationId]: {
@ -258,7 +254,7 @@ describe('state/selectors/messages', () => {
}, },
}); });
assert.strictEqual( assert.strictEqual(
getMessagePropStatus(readMessage, ourConversationId, true), getMessagePropStatus(readMessage, ourConversationId),
'read' 'read'
); );
@ -271,35 +267,11 @@ describe('state/selectors/messages', () => {
}, },
}); });
assert.strictEqual( assert.strictEqual(
getMessagePropStatus(viewedMessage, ourConversationId, true), getMessagePropStatus(viewedMessage, ourConversationId),
'read' 'read'
); );
}); });
it('returns "delivered" if the message was read by at least one person and you have read receipts disabled', () => {
const message = createMessage({
sendStateByConversationId: {
[ourConversationId]: {
status: SendStatus.Sent,
updatedAt: Date.now(),
},
[uuid()]: {
status: SendStatus.Pending,
updatedAt: Date.now(),
},
[uuid()]: {
status: SendStatus.Read,
updatedAt: Date.now(),
},
},
});
assert.strictEqual(
getMessagePropStatus(message, ourConversationId, false),
'delivered'
);
});
it('returns "delivered" if the message was delivered to at least one person, but no "higher"', () => { it('returns "delivered" if the message was delivered to at least one person, but no "higher"', () => {
const message = createMessage({ const message = createMessage({
sendStateByConversationId: { sendStateByConversationId: {
@ -323,7 +295,7 @@ describe('state/selectors/messages', () => {
}); });
assert.strictEqual( assert.strictEqual(
getMessagePropStatus(message, ourConversationId, true), getMessagePropStatus(message, ourConversationId),
'delivered' 'delivered'
); );
}); });
@ -347,7 +319,7 @@ describe('state/selectors/messages', () => {
}); });
assert.strictEqual( assert.strictEqual(
getMessagePropStatus(message, ourConversationId, true), getMessagePropStatus(message, ourConversationId),
'sent' 'sent'
); );
}); });
@ -371,7 +343,7 @@ describe('state/selectors/messages', () => {
}); });
assert.strictEqual( assert.strictEqual(
getMessagePropStatus(message, ourConversationId, true), getMessagePropStatus(message, ourConversationId),
'sending' 'sending'
); );
}); });