Sync story read status from primary

This commit is contained in:
Josh Perez 2022-04-20 20:29:37 -04:00 committed by GitHub
parent da45f26d37
commit 4896ce32c3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 24 additions and 24 deletions

View File

@ -9,7 +9,7 @@ import { Collection, Model } from 'backbone';
import type { ConversationModel } from '../models/conversations';
import type { MessageModel } from '../models/messages';
import type { MessageAttributesType } from '../model-types.d';
import { isOutgoing } from '../state/selectors/message';
import { isOutgoing, isStory } from '../state/selectors/message';
import { isDirectConversation } from '../util/whatTypeOfConversation';
import { getOwn } from '../util/getOwn';
import { missingCaseError } from '../util/missingCaseError';
@ -66,7 +66,8 @@ async function getTargetMessage(
return null;
}
const message = messages.find(
item => isOutgoing(item) && sourceId === item.conversationId
item =>
(isOutgoing(item) || isStory(item)) && sourceId === item.conversationId
);
if (message) {
return window.MessageController.register(message.id, message);
@ -78,7 +79,8 @@ async function getTargetMessage(
ids.push(sourceId);
const target = messages.find(
item => isOutgoing(item) && ids.includes(item.conversationId)
item =>
(isOutgoing(item) || isStory(item)) && ids.includes(item.conversationId)
);
if (!target) {
return null;

View File

@ -8,7 +8,7 @@ import { Collection, Model } from 'backbone';
import type { MessageModel } from '../models/messages';
import { ReadStatus } from '../messages/MessageReadStatus';
import { markViewed } from '../services/MessageUpdater';
import { isIncoming } from '../state/selectors/message';
import { isIncoming, isStory } from '../state/selectors/message';
import { notificationService } from '../services/notifications';
import * as log from '../logging/log';
@ -67,7 +67,10 @@ export class ViewSyncs extends Collection {
uuid: item.sourceUuid,
});
return isIncoming(item) && senderId === sync.get('senderId');
return (
(isIncoming(item) || isStory(item)) &&
senderId === sync.get('senderId')
);
});
if (!found) {

View File

@ -374,37 +374,32 @@ export function reducer(
'type',
]);
// Stories don't really need to change except for when we don't have the
// attachment downloaded and we queue a download. Then the story's message
// will have the new attachment information. This is an optimization so
// we don't needlessly re-render.
const prevStory = state.stories.find(
const prevStoryIndex = state.stories.findIndex(
existingStory => existingStory.messageId === newStory.messageId
);
if (prevStory) {
if (prevStoryIndex >= 0) {
const prevStory = state.stories[prevStoryIndex];
// Stories rarely need to change, here are the following exceptions:
const isDownloadingAttachment = isDownloading(newStory.attachment);
const hasAttachmentDownloaded =
!isDownloaded(prevStory.attachment) &&
isDownloaded(newStory.attachment);
const readStatusChanged = prevStory.readStatus !== newStory.readStatus;
const shouldReplace =
(!isDownloaded(prevStory.attachment) &&
isDownloaded(newStory.attachment)) ||
isDownloading(newStory.attachment);
isDownloadingAttachment || hasAttachmentDownloaded || readStatusChanged;
if (!shouldReplace) {
return state;
}
const storyIndex = state.stories.findIndex(
existingStory => existingStory.messageId === newStory.messageId
);
if (storyIndex < 0) {
return state;
}
return {
...state,
stories: replaceIndex(state.stories, storyIndex, newStory),
stories: replaceIndex(state.stories, prevStoryIndex, newStory),
};
}
// Adding a new story
const stories = [...state.stories, newStory].sort((a, b) =>
a.timestamp > b.timestamp ? 1 : -1
);