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
		
	
| 
											3 years ago
										 | 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, | ||
|  |   }; | ||
|  | }; |