You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			103 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			TypeScript
		
	
			
		
		
	
	
			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;
 | 
						|
}
 |