Use correct timestamp for receipts of edited messages

This commit is contained in:
Fedor Indutny 2023-05-16 10:37:12 -07:00 committed by GitHub
parent 8fe0047822
commit 5869717cd3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
21 changed files with 156 additions and 52 deletions

View file

@ -389,7 +389,7 @@ export type FTSOptimizationStateType = Readonly<{
}>;
export type EditedMessageType = Readonly<{
fromId: string;
conversationId: string;
messageId: string;
sentAt: number;
readStatus: MessageType['readStatus'];
@ -523,7 +523,7 @@ export type DataInterface = {
storyId?: string;
}) => Promise<GetUnreadByConversationAndMarkReadResultType>;
getUnreadEditedMessagesAndMarkRead: (options: {
fromId: string;
conversationId: string;
newestUnreadAt: number;
}) => Promise<GetUnreadByConversationAndMarkReadResultType>;
getUnreadReactionsAndMarkRead: (options: {

View file

@ -5630,7 +5630,7 @@ async function removeAllProfileKeyCredentials(): Promise<void> {
async function saveEditedMessage(
mainMessage: MessageType,
ourUuid: UUIDStringType,
{ fromId, messageId, readStatus, sentAt }: EditedMessageType
{ conversationId, messageId, readStatus, sentAt }: EditedMessageType
): Promise<void> {
const db = getInstance();
@ -5644,12 +5644,12 @@ async function saveEditedMessage(
const [query, params] = sql`
INSERT INTO edited_messages (
fromId,
conversationId,
messageId,
sentAt,
readStatus
) VALUES (
${fromId},
${conversationId},
${messageId},
${sentAt},
${readStatus}
@ -5675,10 +5675,10 @@ async function _getAllEditedMessages(): Promise<
}
async function getUnreadEditedMessagesAndMarkRead({
fromId,
conversationId,
newestUnreadAt,
}: {
fromId: string;
conversationId: string;
newestUnreadAt: number;
}): Promise<GetUnreadByConversationAndMarkReadResultType> {
const db = getInstance();
@ -5695,7 +5695,7 @@ async function getUnreadEditedMessagesAndMarkRead({
ON messages.id = edited_messages.messageId
WHERE
edited_messages.readStatus = ${ReadStatus.Unread} AND
edited_messages.fromId = ${fromId} AND
edited_messages.conversationId = ${conversationId} AND
received_at <= ${newestUnreadAt}
ORDER BY messages.received_at DESC, messages.sent_at DESC;
`;
@ -5711,7 +5711,7 @@ async function getUnreadEditedMessagesAndMarkRead({
readStatus = ${ReadStatus.Read}
WHERE
readStatus = ${ReadStatus.Unread} AND
fromId = ${fromId} AND
conversationId = ${conversationId} AND
sentAt <= ${newestSentAt};
`;

View file

@ -0,0 +1,29 @@
// Copyright 2023 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
import type { Database } from '@signalapp/better-sqlite3';
import type { LoggerType } from '../../types/Logging';
export default function updateToSchemaVersion82(
currentVersion: number,
db: Database,
logger: LoggerType
): void {
if (currentVersion >= 82) {
return;
}
db.transaction(() => {
db.exec(`
ALTER TABLE edited_messages DROP COLUMN fromId;
ALTER TABLE edited_messages ADD COLUMN conversationId STRING;
CREATE INDEX edited_messages_unread ON edited_messages (readStatus, conversationId);
`);
db.pragma('user_version = 82');
})();
logger.info('updateToSchemaVersion82: success!');
}

View file

@ -57,6 +57,7 @@ import updateToSchemaVersion78 from './78-merge-receipt-jobs';
import updateToSchemaVersion79 from './79-paging-lightbox';
import updateToSchemaVersion80 from './80-edited-messages';
import updateToSchemaVersion81 from './81-contact-removed-notification';
import updateToSchemaVersion82 from './82-edited-messages-read-index';
function updateToSchemaVersion1(
currentVersion: number,
@ -1984,6 +1985,7 @@ export const SCHEMA_VERSIONS = [
updateToSchemaVersion80,
updateToSchemaVersion81,
updateToSchemaVersion82,
];
export function updateSchema(db: Database, logger: LoggerType): void {