Changeset View
Changeset View
Standalone View
Standalone View
lib/actions/upload-actions.js
// @flow | // @flow | ||||
import type { Shape } from '../types/core.js'; | import type { Shape } from '../types/core.js'; | ||||
import type { | import type { | ||||
UploadMultimediaResult, | UploadMultimediaResult, | ||||
Dimensions, | Dimensions, | ||||
} from '../types/media-types.js'; | } from '../types/media-types.js'; | ||||
import type { CallServerEndpoint } from '../utils/call-server-endpoint.js'; | import type { CallServerEndpoint } from '../utils/call-server-endpoint.js'; | ||||
import type { UploadBlob } from '../utils/upload-blob.js'; | import type { UploadBlob } from '../utils/upload-blob.js'; | ||||
export type MultimediaUploadCallbacks = Shape<{ | export type MultimediaUploadCallbacks = Shape<{ | ||||
onProgress: (percent: number) => void, | onProgress: (percent: number) => void, | ||||
abortHandler: (abort: () => void) => void, | abortHandler: (abort: () => void) => void, | ||||
uploadBlob: UploadBlob, | uploadBlob: UploadBlob, | ||||
}>; | }>; | ||||
export type MultimediaUploadExtras = Shape<{ ...Dimensions, loop: boolean }>; | export type MultimediaUploadExtras = Shape<{ | ||||
...Dimensions, | |||||
loop: boolean, | |||||
encryptionKey?: string, | |||||
}>; | |||||
const uploadMultimedia = | const uploadMultimedia = | ||||
( | ( | ||||
callServerEndpoint: CallServerEndpoint, | callServerEndpoint: CallServerEndpoint, | ||||
): (( | ): (( | ||||
multimedia: Object, | multimedia: Object, | ||||
extras: MultimediaUploadExtras, | extras: MultimediaUploadExtras, | ||||
callbacks?: MultimediaUploadCallbacks, | callbacks?: MultimediaUploadCallbacks, | ||||
) => Promise<UploadMultimediaResult>) => | ) => Promise<UploadMultimediaResult>) => | ||||
async (multimedia, extras, callbacks) => { | async (multimedia, extras, callbacks) => { | ||||
const onProgress = callbacks && callbacks.onProgress; | const onProgress = callbacks && callbacks.onProgress; | ||||
const abortHandler = callbacks && callbacks.abortHandler; | const abortHandler = callbacks && callbacks.abortHandler; | ||||
const uploadBlob = callbacks && callbacks.uploadBlob; | const uploadBlob = callbacks && callbacks.uploadBlob; | ||||
const stringExtras = {}; | const stringExtras = {}; | ||||
if (extras.height !== null && extras.height !== undefined) { | if (extras.height !== null && extras.height !== undefined) { | ||||
stringExtras.height = extras.height.toString(); | stringExtras.height = extras.height.toString(); | ||||
} | } | ||||
if (extras.width !== null && extras.width !== undefined) { | if (extras.width !== null && extras.width !== undefined) { | ||||
stringExtras.width = extras.width.toString(); | stringExtras.width = extras.width.toString(); | ||||
} | } | ||||
if (extras.loop) { | if (extras.loop) { | ||||
stringExtras.loop = '1'; | stringExtras.loop = '1'; | ||||
} | } | ||||
if (extras.encryptionKey) { | |||||
stringExtras.encryptionKey = extras.encryptionKey; | |||||
} | |||||
// also pass MIME type if available | |||||
if (multimedia.type && typeof multimedia.type === 'string') { | |||||
stringExtras.mimeType = multimedia.type; | |||||
} | |||||
const response = await callServerEndpoint( | const response = await callServerEndpoint( | ||||
'upload_multimedia', | 'upload_multimedia', | ||||
{ | { | ||||
multimedia: [multimedia], | multimedia: [multimedia], | ||||
...stringExtras, | ...stringExtras, | ||||
}, | }, | ||||
{ | { | ||||
Show All 29 Lines |