fix deduplication for opengroups v1 & v2

pull/1576/head
Audric Ackermann 4 years ago
parent 0c0da48150
commit 6aa699ad23
No known key found for this signature in database
GPG Key ID: 999F434D76324AD4

@ -72,6 +72,7 @@ module.exports = {
getUnreadByConversation, getUnreadByConversation,
getUnreadCountByConversation, getUnreadCountByConversation,
getMessageBySender, getMessageBySender,
getMessageBySenderAndServerId,
getMessageIdsFromServerIds, getMessageIdsFromServerIds,
getMessageById, getMessageById,
getAllMessages, getAllMessages,
@ -1982,7 +1983,7 @@ async function getAllMessageIds() {
} }
// eslint-disable-next-line camelcase // eslint-disable-next-line camelcase
async function getMessageBySender({ source, sourceDevice, sent_at }) { async function getMessageBySender({ source, sourceDevice, sentAt }) {
const rows = await db.all( const rows = await db.all(
`SELECT json FROM ${MESSAGES_TABLE} WHERE `SELECT json FROM ${MESSAGES_TABLE} WHERE
source = $source AND source = $source AND
@ -1991,7 +1992,21 @@ async function getMessageBySender({ source, sourceDevice, sent_at }) {
{ {
$source: source, $source: source,
$sourceDevice: sourceDevice, $sourceDevice: sourceDevice,
$sent_at: sent_at, $sent_at: sentAt,
}
);
return map(rows, row => jsonToObject(row.json));
}
async function getMessageBySenderAndServerId({ source, serverId }) {
const rows = await db.all(
`SELECT json FROM ${MESSAGES_TABLE} WHERE
source = $source AND
serverId = $serverId;`,
{
$source: source,
$serverId: serverId,
} }
); );

@ -117,6 +117,7 @@ const channelsToMake = {
removeAllMessagesInConversation, removeAllMessagesInConversation,
getMessageBySender, getMessageBySender,
getMessageBySenderAndServerId,
getMessageIdsFromServerIds, getMessageIdsFromServerIds,
getMessageById, getMessageById,
getAllMessages, getAllMessages,
@ -720,14 +721,37 @@ export async function getAllMessageIds(): Promise<Array<string>> {
return ids; return ids;
} }
export async function getMessageBySender( export async function getMessageBySender({
// eslint-disable-next-line camelcase source,
{ source, sourceDevice, sent_at }: { source: string; sourceDevice: number; sent_at: number } sourceDevice,
): Promise<MessageModel | null> { sentAt,
}: {
source: string;
sourceDevice: number;
sentAt: number;
}): Promise<MessageModel | null> {
const messages = await channels.getMessageBySender({ const messages = await channels.getMessageBySender({
source, source,
sourceDevice, sourceDevice,
sent_at, sentAt,
});
if (!messages || !messages.length) {
return null;
}
return new MessageModel(messages[0]);
}
export async function getMessageBySenderAndServerId({
source,
serverId,
}: {
source: string;
serverId: number;
}): Promise<MessageModel | null> {
const messages = await channels.getMessageBySenderAndServerId({
source,
serverId,
}); });
if (!messages || !messages.length) { if (!messages || !messages.length) {
return null; return null;

@ -768,7 +768,6 @@ export class ConversationModel extends Backbone.Model<ConversationAttributes> {
return null; return null;
} }
this.queueJob(async () => { this.queueJob(async () => {
console.warn('sending groupinvi', messageModel);
await this.sendMessageJob(messageModel, expireTimer); await this.sendMessageJob(messageModel, expireTimer);
}); });
return null; return null;

@ -415,7 +415,6 @@ export const deleteSingleMessage = async (
}; };
const messageDeletedResult = await sendOpenGroupV2Request(request); const messageDeletedResult = await sendOpenGroupV2Request(request);
const isOk = parseStatusCodeFromOnionRequest(messageDeletedResult) === 200; const isOk = parseStatusCodeFromOnionRequest(messageDeletedResult) === 200;
console.warn('messageDeletedResult', messageDeletedResult);
return isOk; return isOk;
}; };

@ -177,8 +177,6 @@ const handleDeletions = async (
const allRowIds = (deleted || []).map(d => d.id); const allRowIds = (deleted || []).map(d => d.id);
const maxDeletedId = Math.max(...allRowIds); const maxDeletedId = Math.max(...allRowIds);
try { try {
console.warn('We got deletion to do:', deleted, maxDeletedId);
const messageIds = await getMessageIdsFromServerIds(allIdsRemoved, conversationId); const messageIds = await getMessageIdsFromServerIds(allIdsRemoved, conversationId);
await Promise.all( await Promise.all(
@ -253,7 +251,6 @@ const handleCompactPollResults = async (
// we want to do deletions even if we somehow lost the convo. // we want to do deletions even if we somehow lost the convo.
if (res.deletions.length) { if (res.deletions.length) {
console.warn('res.deletions', res.deletions);
// new deletions // new deletions
await handleDeletions(res.deletions, convoId, convo); await handleDeletions(res.deletions, convoId, convo);
} }

@ -13,7 +13,7 @@ import { ConversationController } from '../session/conversations';
import { handleClosedGroupControlMessage } from './closedGroups'; import { handleClosedGroupControlMessage } from './closedGroups';
import { MessageModel } from '../models/message'; import { MessageModel } from '../models/message';
import { MessageModelType } from '../models/messageType'; import { MessageModelType } from '../models/messageType';
import { getMessageBySender } from '../../ts/data/data'; import { getMessageBySender, getMessageBySenderAndServerId } from '../../ts/data/data';
import { ConversationModel, ConversationTypeEnum } from '../models/conversation'; import { ConversationModel, ConversationTypeEnum } from '../models/conversation';
import { DeliveryReceiptMessage } from '../session/messages/outgoing/controlMessage/receipt/DeliveryReceiptMessage'; import { DeliveryReceiptMessage } from '../session/messages/outgoing/controlMessage/receipt/DeliveryReceiptMessage';
@ -347,12 +347,19 @@ export async function isMessageDuplicate({
const { Errors } = window.Signal.Types; const { Errors } = window.Signal.Types;
// serverId is only used for opengroupv2 // serverId is only used for opengroupv2
try { try {
const result = await getMessageBySender({ let result;
if (serverId) {
result = await getMessageBySenderAndServerId({
source,
serverId,
});
} else {
result = await getMessageBySender({
source, source,
sourceDevice, sourceDevice,
sent_at: timestamp, sentAt: timestamp,
}); });
}
if (!result) { if (!result) {
return false; return false;
} }

Loading…
Cancel
Save