Deduplicate message_changed redux actions

This commit is contained in:
trevor-signal 2023-10-25 16:44:50 -04:00 committed by GitHub
parent 8bb355f971
commit cfe15b929b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 19 additions and 32 deletions

View file

@ -132,7 +132,6 @@ import { getMessageIdForLogging } from '../util/idForLogging';
import { hasAttachmentDownloads } from '../util/hasAttachmentDownloads'; import { hasAttachmentDownloads } from '../util/hasAttachmentDownloads';
import { queueAttachmentDownloads } from '../util/queueAttachmentDownloads'; import { queueAttachmentDownloads } from '../util/queueAttachmentDownloads';
import { findStoryMessages } from '../util/findStoryMessage'; import { findStoryMessages } from '../util/findStoryMessage';
import { getStoryDataFromMessageAttributes } from '../services/storyLoader';
import type { ConversationQueueJobData } from '../jobs/conversationJobQueue'; import type { ConversationQueueJobData } from '../jobs/conversationJobQueue';
import { shouldDownloadStory } from '../util/shouldDownloadStory'; import { shouldDownloadStory } from '../util/shouldDownloadStory';
import type { EmbeddedContactWithHydratedAvatar } from '../types/EmbeddedContact'; import type { EmbeddedContactWithHydratedAvatar } from '../types/EmbeddedContact';
@ -249,44 +248,15 @@ export class MessageModel extends window.Backbone.Model<MessageAttributesType> {
this.CURRENT_PROTOCOL_VERSION = Proto.DataMessage.ProtocolVersion.CURRENT; this.CURRENT_PROTOCOL_VERSION = Proto.DataMessage.ProtocolVersion.CURRENT;
this.INITIAL_PROTOCOL_VERSION = Proto.DataMessage.ProtocolVersion.INITIAL; this.INITIAL_PROTOCOL_VERSION = Proto.DataMessage.ProtocolVersion.INITIAL;
this.on('change', this.notifyRedux); this.on('change', this.updateMessageCache);
} }
notifyRedux(): void { updateMessageCache(): void {
if (!window.reduxActions) {
return;
}
window.MessageCache.setAttributes({ window.MessageCache.setAttributes({
messageId: this.id, messageId: this.id,
messageAttributes: this.attributes, messageAttributes: this.attributes,
skipSaveToDatabase: true, skipSaveToDatabase: true,
}); });
const { storyChanged } = window.reduxActions.stories;
if (isStory(this.attributes)) {
const storyData = getStoryDataFromMessageAttributes({
...this.attributes,
});
if (!storyData) {
return;
}
storyChanged(storyData);
// We don't want messageChanged to run
return;
}
const { messageChanged } = window.reduxActions.conversations;
if (messageChanged) {
const conversationId = this.get('conversationId');
// Note: The clone is important for triggering a re-run of selectors
messageChanged(this.id, conversationId, { ...this.attributes });
}
} }
getSenderIdentifier(): string { getSenderIdentifier(): string {

View file

@ -14,6 +14,8 @@ import { getSenderIdentifier } from '../util/getSenderIdentifier';
import { isNotNil } from '../util/isNotNil'; import { isNotNil } from '../util/isNotNil';
import { map } from '../util/iterables'; import { map } from '../util/iterables';
import { softAssert, strictAssert } from '../util/assert'; import { softAssert, strictAssert } from '../util/assert';
import { isStory } from '../messages/helpers';
import { getStoryDataFromMessageAttributes } from './storyLoader';
export class MessageCache { export class MessageCache {
private state = { private state = {
@ -197,6 +199,21 @@ export class MessageCache {
this.markModelStale(nextMessageAttributes); this.markModelStale(nextMessageAttributes);
if (window.reduxActions) { if (window.reduxActions) {
if (isStory(nextMessageAttributes)) {
const storyData = getStoryDataFromMessageAttributes({
...nextMessageAttributes,
});
if (!storyData) {
return;
}
window.reduxActions.stories.storyChanged(storyData);
// We don't want messageChanged to run
return;
}
window.reduxActions.conversations.messageChanged( window.reduxActions.conversations.messageChanged(
messageId, messageId,
nextMessageAttributes.conversationId, nextMessageAttributes.conversationId,