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.
		
		
		
		
		
			
		
			
				
	
	
		
			49 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			TypeScript
		
	
			
		
		
	
	
			49 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			TypeScript
		
	
| import AbortController from 'abort-controller';
 | |
| import { isNumber } from 'lodash';
 | |
| import { OpenGroupRequestCommonType } from '../opengroupV2/ApiUtil';
 | |
| import { batchFirstSubIsSuccess, batchGlobalIsSuccess, sogsBatchSend } from './sogsV3BatchPoll';
 | |
| import { uploadFileToRoomSogs3 } from './sogsV3SendFile';
 | |
| 
 | |
| /**
 | |
|  * This function does a double request to the sogs.
 | |
|  * - First request uploads the file content to the server and gets the associated fileId.
 | |
|  * - Second request set the preview/avatar image of that room to the just got fileId.
 | |
|  *
 | |
|  * @param fileContent the content of the image to upload as new sogs room image. Be sure to resize it to not have something too big (500x500 jpeg should be enough)
 | |
|  * @param roomInfos the room details including the
 | |
|  * @returns the fileId and the full url of the new avatar. To be used for redownload and to set the avatar locally once it is updated.
 | |
|  */
 | |
| export const uploadImageForRoomSogsV3 = async (
 | |
|   fileContent: Uint8Array,
 | |
|   roomInfos: OpenGroupRequestCommonType
 | |
| ): Promise<{ fileUrl: string; fileId: number } | null> => {
 | |
|   if (!fileContent || !fileContent.length) {
 | |
|     return null;
 | |
|   }
 | |
| 
 | |
|   const result = await uploadFileToRoomSogs3(fileContent, roomInfos);
 | |
|   if (!result || !isNumber(result.fileId)) {
 | |
|     return null;
 | |
|   }
 | |
|   const { fileId, fileUrl } = result;
 | |
|   if (!fileId || !fileContent.length) {
 | |
|     return null;
 | |
|   }
 | |
| 
 | |
|   const batchResult = await sogsBatchSend(
 | |
|     roomInfos.serverUrl,
 | |
|     new Set([roomInfos.roomId]),
 | |
|     new AbortController().signal,
 | |
|     [{ type: 'updateRoom', updateRoom: { roomId: roomInfos.roomId, imageId: fileId } }],
 | |
|     'batch'
 | |
|   );
 | |
| 
 | |
|   if (!batchGlobalIsSuccess(batchResult) || !batchFirstSubIsSuccess(batchResult)) {
 | |
|     return null;
 | |
|   }
 | |
|   return {
 | |
|     fileUrl,
 | |
|     fileId,
 | |
|   };
 | |
| };
 |