104 lines
2.8 KiB
TypeScript
104 lines
2.8 KiB
TypeScript
import { Q } from '@nozbe/watermelondb';
|
|
|
|
import { IServerSubscription, IServerRoom } from '../../../definitions';
|
|
import database from '../../database';
|
|
|
|
export default async (subscriptions: IServerSubscription[], rooms: IServerRoom[]) => {
|
|
let sub = subscriptions;
|
|
let room = rooms;
|
|
try {
|
|
const db = database.active;
|
|
const subCollection = db.get('subscriptions');
|
|
|
|
const roomIds = rooms.filter(r => !subscriptions.find(s => s.rid === r._id)).map(r => r._id);
|
|
const existingSubs = await subCollection.query(Q.where('rid', Q.oneOf(roomIds))).fetch();
|
|
const mappedExistingSubs = existingSubs.map(s => ({
|
|
_id: s._id,
|
|
f: s.f,
|
|
t: s.t,
|
|
ts: s.ts,
|
|
ls: s.ls,
|
|
name: s.name,
|
|
fname: s.fname,
|
|
rid: s.rid,
|
|
open: s.open,
|
|
alert: s.alert,
|
|
unread: s.unread,
|
|
userMentions: s.userMentions,
|
|
roomUpdatedAt: s.roomUpdatedAt,
|
|
ro: s.ro,
|
|
lastOpen: s.lastOpen,
|
|
description: s.description,
|
|
announcement: s.announcement,
|
|
bannerClosed: s.bannerClosed,
|
|
topic: s.topic,
|
|
blocked: s.blocked,
|
|
blocker: s.blocker,
|
|
reactWhenReadOnly: s.reactWhenReadOnly,
|
|
archived: s.archived,
|
|
joinCodeRequired: s.joinCodeRequired,
|
|
muted: s.muted,
|
|
unmuted: s.unmuted,
|
|
broadcast: s.broadcast,
|
|
prid: s.prid,
|
|
draftMessage: s.draftMessage,
|
|
lastThreadSync: s.lastThreadSync,
|
|
jitsiTimeout: s.jitsiTimeout,
|
|
autoTranslate: s.autoTranslate,
|
|
autoTranslateLanguage: s.autoTranslateLanguage,
|
|
lastMessage: s.lastMessage,
|
|
usernames: s.usernames,
|
|
uids: s.uids,
|
|
visitor: s.visitor,
|
|
departmentId: s.departmentId,
|
|
servedBy: s.servedBy,
|
|
livechatData: s.livechatData,
|
|
tags: s.tags,
|
|
encrypted: s.encrypted,
|
|
e2eKeyId: s.e2eKeyId,
|
|
E2EKey: s.E2EKey,
|
|
avatarETag: s.avatarETag
|
|
}));
|
|
// Assign
|
|
sub = subscriptions.concat(mappedExistingSubs as unknown as IServerSubscription);
|
|
|
|
const subsIds = subscriptions.filter(s => !rooms.find(r => s.rid === r._id)).map(s => s._id);
|
|
const existingRooms = await subCollection.query(Q.where('id', Q.oneOf(subsIds))).fetch();
|
|
const mappedExistingRooms = existingRooms.map(r => ({
|
|
_updatedAt: r._updatedAt,
|
|
lastMessage: r.lastMessage,
|
|
description: r.description,
|
|
topic: r.topic,
|
|
announcement: r.announcement,
|
|
reactWhenReadOnly: r.reactWhenReadOnly,
|
|
archived: r.archived,
|
|
joinCodeRequired: r.joinCodeRequired,
|
|
jitsiTimeout: r.jitsiTimeout,
|
|
usernames: r.usernames,
|
|
uids: r.uids,
|
|
ro: r.ro,
|
|
broadcast: r.broadcast,
|
|
muted: r.muted,
|
|
unmuted: r.unmuted,
|
|
sysMes: r.sysMes,
|
|
v: r.v,
|
|
departmentId: r.departmentId,
|
|
servedBy: r.servedBy,
|
|
livechatData: r.livechatData,
|
|
tags: r.tags,
|
|
encrypted: r.encrypted,
|
|
e2eKeyId: r.e2eKeyId,
|
|
avatarETag: r.avatarETag
|
|
}));
|
|
// Assign
|
|
room = rooms.concat(mappedExistingRooms as unknown as IServerRoom);
|
|
} catch {
|
|
// do nothing
|
|
}
|
|
|
|
return {
|
|
subscriptions: sub,
|
|
rooms: room
|
|
};
|
|
};
|