Oops, forgot to commit this.
This commit is contained in:
parent
1134eef3ad
commit
8bdecb7e07
|
@ -0,0 +1,80 @@
|
||||||
|
import axios from 'axios';
|
||||||
|
import { sleep } from 'src/utils';
|
||||||
|
|
||||||
|
const BASE_URL = 'http://localhost:8082';
|
||||||
|
|
||||||
|
const api = axios.create({
|
||||||
|
baseURL: BASE_URL,
|
||||||
|
});
|
||||||
|
|
||||||
|
export enum VideoProcessingStatus {
|
||||||
|
WAITING = 'WAITING',
|
||||||
|
IN_PROGRESS = 'IN_PROGRESS',
|
||||||
|
COMPLETED = 'COMPLETED',
|
||||||
|
FAILED = 'FAILED',
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface FileMetadata {
|
||||||
|
filename: string;
|
||||||
|
mimeType: string;
|
||||||
|
size: number;
|
||||||
|
uploadedAt: string;
|
||||||
|
availableForDownload: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function uploadVideoToCDN(file: File): Promise<string> {
|
||||||
|
const response = await api.post('/uploads/video', file, {
|
||||||
|
headers: {
|
||||||
|
'Content-Type': file.type,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
return response.data.id;
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function getVideoProcessingStatus(
|
||||||
|
id: string
|
||||||
|
): Promise<VideoProcessingStatus | null> {
|
||||||
|
try {
|
||||||
|
const response = await api.get(`/uploads/video/${id}/status`);
|
||||||
|
return response.data.status;
|
||||||
|
} catch (error: any) {
|
||||||
|
if (error.response && error.response.status === 404) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function waitUntilVideoProcessingComplete(
|
||||||
|
id: string
|
||||||
|
): Promise<VideoProcessingStatus> {
|
||||||
|
let failureCount = 0;
|
||||||
|
let attemptCount = 0;
|
||||||
|
while (failureCount < 5 && attemptCount < 60) {
|
||||||
|
await sleep(1000);
|
||||||
|
attemptCount++;
|
||||||
|
try {
|
||||||
|
const status = await getVideoProcessingStatus(id);
|
||||||
|
failureCount = 0;
|
||||||
|
if (
|
||||||
|
status === VideoProcessingStatus.COMPLETED ||
|
||||||
|
status === VideoProcessingStatus.FAILED
|
||||||
|
) {
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
} catch (error: any) {
|
||||||
|
console.log(error);
|
||||||
|
failureCount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
throw new Error('Failed to wait for processing to finish.');
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function getFileMetadata(id: string): Promise<FileMetadata> {
|
||||||
|
const response = await api.get(`/files/${id}/metadata`);
|
||||||
|
return response.data;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getFileUrl(id: string): string {
|
||||||
|
return BASE_URL + '/files/' + id;
|
||||||
|
}
|
Loading…
Reference in New Issue