50 lines
1.4 KiB
JavaScript
50 lines
1.4 KiB
JavaScript
import { sanitizedRaw } from '@nozbe/watermelondb/RawRecord';
|
|
|
|
import database from '../database';
|
|
import { getMessageById } from '../database/services/Message';
|
|
import { getThreadById } from '../database/services/Thread';
|
|
import log from '../../utils/log';
|
|
import { Encryption } from '../encryption';
|
|
import getSingleMessage from './getSingleMessage';
|
|
|
|
const buildThreadName = thread => thread.msg || thread?.attachments?.[0]?.title;
|
|
|
|
const getThreadName = async (rid, tmid, messageId) => {
|
|
let tmsg;
|
|
try {
|
|
const db = database.active;
|
|
const threadCollection = db.get('threads');
|
|
const messageRecord = await getMessageById(messageId);
|
|
const threadRecord = await getThreadById(tmid);
|
|
if (threadRecord) {
|
|
tmsg = buildThreadName(threadRecord);
|
|
await db.action(async () => {
|
|
await messageRecord?.update(m => {
|
|
m.tmsg = tmsg;
|
|
});
|
|
});
|
|
} else {
|
|
let thread = await getSingleMessage(tmid);
|
|
thread = await Encryption.decryptMessage(thread);
|
|
tmsg = buildThreadName(thread);
|
|
await db.action(async () => {
|
|
await db.batch(
|
|
threadCollection?.prepareCreate(t => {
|
|
t._raw = sanitizedRaw({ id: thread._id }, threadCollection.schema);
|
|
t.subscription.id = rid;
|
|
Object.assign(t, thread);
|
|
}),
|
|
messageRecord?.prepareUpdate(m => {
|
|
m.tmsg = tmsg;
|
|
})
|
|
);
|
|
});
|
|
}
|
|
} catch (e) {
|
|
log(e);
|
|
}
|
|
return tmsg;
|
|
};
|
|
|
|
export default getThreadName;
|