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