From ef86d6e3694abce5a6f5ed3ee8bf56cdfd4913fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20H=C3=BCttemann?= Date: Mon, 12 Jun 2023 14:54:39 +0200 Subject: [PATCH] --wip-- [skip ci] --- src/app.ts | 28 ++++++++++++++++++++++++---- src/handlers/rooms.ts | 29 ++++++++++++++++++++--------- 2 files changed, 44 insertions(+), 13 deletions(-) diff --git a/src/app.ts b/src/app.ts index 43c4ad0..ae9906f 100644 --- a/src/app.ts +++ b/src/app.ts @@ -8,6 +8,7 @@ import { RcUser, createUser } from './handlers/users' import log from './helpers/logger' import { getMapping, initStorage, save } from './helpers/storage' import { whoami } from './helpers/synapse' +import { RcRoom, createRoom } from './handlers/rooms' log.info('rocketchat2matrix starts.') @@ -65,7 +66,7 @@ async function loadRcExport(entity: Entities) { mapping = new IdMapping() mapping.rcId = rcUser._id mapping.matrixId = matrixUser.user_id - mapping.type = 0 + mapping.type = entities[entity].mappingType mapping.accessToken = matrixUser.access_token await save(mapping) @@ -85,7 +86,25 @@ async function loadRcExport(entity: Entities) { break case Entities.Rooms: - log.debug(`Room: ${item.name}`) + const rcRoom: RcRoom = item + log.debug(`Room: ${rcRoom.name}`, rcRoom) + + let roomMapping = await getMapping( + rcRoom._id, + entities[entity].mappingType + ) + if (roomMapping && roomMapping.matrixId) { + log.debug('Mapping exists:', roomMapping) + } else { + const matrixRoom = await createRoom(rcRoom) + roomMapping = new IdMapping() + roomMapping.rcId = rcRoom._id + roomMapping.matrixId = matrixRoom.room_id + roomMapping.type = entities[entity].mappingType + + await save(roomMapping) + log.debug('Mapping added:', roomMapping) + } break case Entities.Messages: @@ -102,10 +121,11 @@ async function main() { try { await whoami() await initStorage() - await loadRcExport(Entities.Users) + // await loadRcExport(Entities.Users) + await loadRcExport(Entities.Rooms) log.info('Done.') } catch (error) { - log.error(`Encountered an error while booting up`) + log.error(`Encountered an error while booting up: ${error}`) } } diff --git a/src/handlers/rooms.ts b/src/handlers/rooms.ts index e5f022c..673e0ec 100644 --- a/src/handlers/rooms.ts +++ b/src/handlers/rooms.ts @@ -35,7 +35,7 @@ export type MatrixRoom = { topic?: string is_direct?: boolean preset?: MatrixRoomPresets - _creatorId: string + _creatorId?: string } export function mapRoom(rcRoom: RcRoom): MatrixRoom { @@ -72,22 +72,33 @@ export function mapRoom(rcRoom: RcRoom): MatrixRoom { throw new Error(message) } if (!room._creatorId) { - const message = `Creator ID could not be determined for room of type ${rcRoom.t}` - log.error(message) - throw new Error(message) + log.warn( + `Creator ID could not be determined for room ${rcRoom.name} of type ${rcRoom.t}.` + ) } return room } export async function createRoom(rcRoom: RcRoom): Promise { const room: MatrixRoom = mapRoom(rcRoom) + let sessionOptions = {} + if (room._creatorId) { + try { + sessionOptions = await getUserSessionOptions(room._creatorId) + log.debug('Room user session generated:', sessionOptions) + } catch (error) { + log.warn(error) + // TODO: Skip room, if it has 0-1 member or is a direct chat? + } + } + log.debug('Creating room:', room) + delete room._creatorId + room.room_id = ( - await axios.post( - '/_matrix/client/v3/createRoom', - room, - await getUserSessionOptions(room._creatorId) - ) + await axios.post('/_matrix/client/v3/createRoom', room, sessionOptions) ).data.room_id + // TODO: Add members + return room }