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;
 | |
| }
 |