session-desktop/ts/data/opengroups.ts

103 lines
3.0 KiB
TypeScript

import { ConversationCollection } from '../models/conversation';
import { OpenGroupRequestCommonType } from '../opengroup/opengroupV2/ApiUtil';
import { isOpenGroupV2 } from '../opengroup/utils/OpenGroupUtils';
import { channels } from './channels';
export type OpenGroupV2Room = {
serverUrl: string;
serverPublicKey: string; // this is actually shared for all this server's room
roomId: string;
roomName?: string; // a user displayed name
imageID?: string; // the url to the group's image
conversationId?: string; // the linked ConversationModel.id
lastMessageFetchedServerID?: number;
/**
* This value represents the rowId of the last message deleted. Not the id of the last message ID
*/
lastMessageDeletedServerID?: number;
/**
* This value is set with the current timestamp whenever we get new messages.
*/
lastFetchTimestamp?: number;
token?: string; // currently, the token is on a per room basis
};
export async function getAllV2OpenGroupRooms(): Promise<Map<string, OpenGroupV2Room> | undefined> {
const opengroupsv2Rooms = (await channels.getAllV2OpenGroupRooms()) as Array<OpenGroupV2Room>;
if (!opengroupsv2Rooms) {
return undefined;
}
const results = new Map<string, OpenGroupV2Room>();
opengroupsv2Rooms.forEach(o => {
if (o.conversationId) {
results.set(o.conversationId, o);
}
});
return results;
}
export async function getV2OpenGroupRoom(
conversationId: string
): Promise<OpenGroupV2Room | undefined> {
if (!isOpenGroupV2(conversationId)) {
throw new Error(`getV2OpenGroupRoom: this is not a valid v2 id: ${conversationId}`);
}
const opengroupv2Rooms = channels.getV2OpenGroupRoom(conversationId);
if (!opengroupv2Rooms) {
return undefined;
}
return opengroupv2Rooms;
}
export async function getV2OpenGroupRoomByRoomId(
roomInfos: OpenGroupRequestCommonType
): Promise<OpenGroupV2Room | undefined> {
const room = await channels.getV2OpenGroupRoomByRoomId(roomInfos.serverUrl, roomInfos.roomId);
if (!room) {
return undefined;
}
return room;
}
export async function saveV2OpenGroupRoom(opengroupsv2Room: OpenGroupV2Room): Promise<void> {
if (
!opengroupsv2Room.conversationId ||
!opengroupsv2Room.roomId ||
!opengroupsv2Room.serverUrl ||
!opengroupsv2Room.serverPublicKey
) {
throw new Error('Cannot save v2 room, invalid data');
}
await channels.saveV2OpenGroupRoom(opengroupsv2Room);
}
export async function removeV2OpenGroupRoom(conversationId: string): Promise<void> {
await channels.removeV2OpenGroupRoom(conversationId);
}
export const channelsToMake = {
getAllV2OpenGroupRooms,
getV2OpenGroupRoom,
getV2OpenGroupRoomByRoomId,
saveV2OpenGroupRoom,
removeV2OpenGroupRoom,
getAllOpenGroupV2Conversations,
};
export async function getAllOpenGroupV2Conversations(): Promise<ConversationCollection> {
const conversations = await channels.getAllOpenGroupV2Conversations();
const collection = new ConversationCollection();
collection.add(conversations);
return collection;
}