51 lines
1.6 KiB
TypeScript
51 lines
1.6 KiB
TypeScript
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 './helpers/log';
|
|
import { Encryption } from '../encryption';
|
|
import getSingleMessage from './getSingleMessage';
|
|
import { IMessage, IThread, TThreadModel } from '../../definitions';
|
|
|
|
const buildThreadName = (thread: IThread | IMessage): string | undefined => thread.msg || thread?.attachments?.[0]?.title;
|
|
|
|
const getThreadName = async (rid: string, tmid: string, messageId: string): Promise<string | undefined> => {
|
|
let tmsg: string | undefined;
|
|
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.write(async () => {
|
|
await messageRecord?.update(m => {
|
|
m.tmsg = tmsg;
|
|
});
|
|
});
|
|
} else {
|
|
let thread = await getSingleMessage(tmid);
|
|
thread = await Encryption.decryptMessage(thread);
|
|
tmsg = buildThreadName(thread);
|
|
await db.write(async () => {
|
|
await db.batch(
|
|
threadCollection?.prepareCreate((t: TThreadModel) => {
|
|
t._raw = sanitizedRaw({ id: thread._id }, threadCollection.schema);
|
|
if (t.subscription) t.subscription.id = rid;
|
|
Object.assign(t, thread);
|
|
}),
|
|
messageRecord?.prepareUpdate(m => {
|
|
m.tmsg = tmsg;
|
|
})
|
|
);
|
|
});
|
|
}
|
|
} catch (e) {
|
|
log(e);
|
|
}
|
|
return tmsg;
|
|
};
|
|
|
|
export default getThreadName;
|