Skip thread replies imported before the thread root

This commit is contained in:
Henrik Hüttemann 2023-09-01 11:36:24 +02:00
parent b5605e64f7
commit bf683e84cf
No known key found for this signature in database
GPG Key ID: 9F7BD10E0A8A111E
2 changed files with 24 additions and 10 deletions

View File

@ -58,7 +58,8 @@ test('handling messages', async () => {
mockedAxios.put.mockResolvedValue({ data: { event_id: 'test@matrix' } }) mockedAxios.put.mockResolvedValue({ data: { event_id: 'test@matrix' } })
mockedStorage.getRoomId.mockResolvedValue('testMatrixRoom') mockedStorage.getRoomId.mockResolvedValue('testMatrixRoom')
mockedStorage.getUserId.mockResolvedValue('testMatrixUser') mockedStorage.getUserId.mockResolvedValue('testMatrixUser')
mockedStorage.getMessageId.mockResolvedValue('testMatrixMessage') mockedStorage.getMessageId.mockResolvedValueOnce(undefined) // For checking if the Message already exists
mockedStorage.getMessageId.mockResolvedValue('testMatrixMessage') // For checking the parent message
await expect(handle({ ...rcMessage, tmid: 'threadId' })).resolves.toBe( await expect(handle({ ...rcMessage, tmid: 'threadId' })).resolves.toBe(
undefined undefined

View File

@ -85,12 +85,20 @@ export async function createMessage(
} }
export async function handle(rcMessage: RcMessage): Promise<void> { export async function handle(rcMessage: RcMessage): Promise<void> {
log.info(`Parsing message with ID: ${rcMessage._id}`)
const matrixId = await getMessageId(rcMessage._id)
if (matrixId) {
log.debug(`Mapping exists: ${rcMessage._id} -> ${matrixId}`)
return
}
if (rcMessage.t) { if (rcMessage.t) {
log.warn(`Message ${rcMessage._id} is of type ${rcMessage.t}, skipping.`) log.warn(`Message ${rcMessage._id} is of type ${rcMessage.t}, skipping.`)
return return
} }
const room_id = (await getRoomId(rcMessage.rid)) || '' const room_id = await getRoomId(rcMessage.rid)
if (!room_id) { if (!room_id) {
log.warn( log.warn(
`Could not find room ${rcMessage.rid} for message ${rcMessage._id}, skipping.` `Could not find room ${rcMessage.rid} for message ${rcMessage._id}, skipping.`
@ -98,7 +106,7 @@ export async function handle(rcMessage: RcMessage): Promise<void> {
return return
} }
const user_id = (await getUserId(rcMessage.u._id)) || '' const user_id = await getUserId(rcMessage.u._id)
if (!user_id) { if (!user_id) {
log.warn( log.warn(
`Could not find author ${rcMessage.u.username} for message ${rcMessage._id}, skipping.` `Could not find author ${rcMessage.u.username} for message ${rcMessage._id}, skipping.`
@ -110,14 +118,19 @@ export async function handle(rcMessage: RcMessage): Promise<void> {
const ts = new Date(rcMessage.ts.$date).valueOf() const ts = new Date(rcMessage.ts.$date).valueOf()
if (rcMessage.tmid) { if (rcMessage.tmid) {
const event_id = (await getMessageId(rcMessage.tmid)) || '' const event_id = await getMessageId(rcMessage.tmid)
matrixMessage['m.relates_to'] = { if (!event_id) {
rel_type: 'm.thread', log.warn(`Related message ${rcMessage.tmid} missing, skipping.`)
event_id, return
is_falling_back: true, } else {
'm.in_reply_to': { matrixMessage['m.relates_to'] = {
rel_type: 'm.thread',
event_id, event_id,
}, is_falling_back: true,
'm.in_reply_to': {
event_id,
},
}
} }
} }