From eab8ec3ba81b86fdd4ade920d999c28fb34785b1 Mon Sep 17 00:00:00 2001 From: Hyteq Date: Sun, 20 Jul 2025 10:48:40 +0300 Subject: format, cleanup, deps --- apps/web/src/lib/media-processing.ts | 162 +++++++++++++++++------------------ 1 file changed, 81 insertions(+), 81 deletions(-) (limited to 'apps/web/src/lib/media-processing.ts') diff --git a/apps/web/src/lib/media-processing.ts b/apps/web/src/lib/media-processing.ts index 353c3113..738621b7 100644 --- a/apps/web/src/lib/media-processing.ts +++ b/apps/web/src/lib/media-processing.ts @@ -1,101 +1,101 @@ import { toast } from "sonner"; import { - getFileType, - generateVideoThumbnail, - getMediaDuration, - getImageDimensions, - type MediaItem, + getFileType, + generateVideoThumbnail, + getMediaDuration, + getImageDimensions, + type MediaItem, } from "@/stores/media-store"; import { generateThumbnail, getVideoInfo } from "./ffmpeg-utils"; export interface ProcessedMediaItem extends Omit {} export async function processMediaFiles( - files: FileList | File[], - onProgress?: (progress: number) => void + files: FileList | File[], + onProgress?: (progress: number) => void, ): Promise { - const fileArray = Array.from(files); - const processedItems: ProcessedMediaItem[] = []; + const fileArray = Array.from(files); + const processedItems: ProcessedMediaItem[] = []; - const total = fileArray.length; - let completed = 0; + const total = fileArray.length; + let completed = 0; - for (const file of fileArray) { - const fileType = getFileType(file); + for (const file of fileArray) { + const fileType = getFileType(file); - if (!fileType) { - toast.error(`Unsupported file type: ${file.name}`); - continue; - } + if (!fileType) { + toast.error(`Unsupported file type: ${file.name}`); + continue; + } - const url = URL.createObjectURL(file); - let thumbnailUrl: string | undefined; - let duration: number | undefined; - let width: number | undefined; - let height: number | undefined; - let fps: number | undefined; + const url = URL.createObjectURL(file); + let thumbnailUrl: string | undefined; + let duration: number | undefined; + let width: number | undefined; + let height: number | undefined; + let fps: number | undefined; - try { - if (fileType === "image") { - // Get image dimensions - const dimensions = await getImageDimensions(file); - width = dimensions.width; - height = dimensions.height; - } else if (fileType === "video") { - try { - // Use FFmpeg for comprehensive video info extraction - const videoInfo = await getVideoInfo(file); - duration = videoInfo.duration; - width = videoInfo.width; - height = videoInfo.height; - fps = videoInfo.fps; + try { + if (fileType === "image") { + // Get image dimensions + const dimensions = await getImageDimensions(file); + width = dimensions.width; + height = dimensions.height; + } else if (fileType === "video") { + try { + // Use FFmpeg for comprehensive video info extraction + const videoInfo = await getVideoInfo(file); + duration = videoInfo.duration; + width = videoInfo.width; + height = videoInfo.height; + fps = videoInfo.fps; - // Generate thumbnail using FFmpeg - thumbnailUrl = await generateThumbnail(file, 1); - } catch (error) { - console.warn( - "FFmpeg processing failed, falling back to basic processing:", - error - ); - // Fallback to basic processing - const videoResult = await generateVideoThumbnail(file); - thumbnailUrl = videoResult.thumbnailUrl; - width = videoResult.width; - height = videoResult.height; - duration = await getMediaDuration(file); - // FPS will remain undefined for fallback - } - } else if (fileType === "audio") { - // For audio, we don't set width/height/fps (they'll be undefined) - duration = await getMediaDuration(file); - } + // Generate thumbnail using FFmpeg + thumbnailUrl = await generateThumbnail(file, 1); + } catch (error) { + console.warn( + "FFmpeg processing failed, falling back to basic processing:", + error, + ); + // Fallback to basic processing + const videoResult = await generateVideoThumbnail(file); + thumbnailUrl = videoResult.thumbnailUrl; + width = videoResult.width; + height = videoResult.height; + duration = await getMediaDuration(file); + // FPS will remain undefined for fallback + } + } else if (fileType === "audio") { + // For audio, we don't set width/height/fps (they'll be undefined) + duration = await getMediaDuration(file); + } - processedItems.push({ - name: file.name, - type: fileType, - file, - url, - thumbnailUrl, - duration, - width, - height, - fps, - }); + processedItems.push({ + name: file.name, + type: fileType, + file, + url, + thumbnailUrl, + duration, + width, + height, + fps, + }); - // Yield back to the event loop to keep the UI responsive - await new Promise((resolve) => setTimeout(resolve, 0)); + // Yield back to the event loop to keep the UI responsive + await new Promise((resolve) => setTimeout(resolve, 0)); - completed += 1; - if (onProgress) { - const percent = Math.round((completed / total) * 100); - onProgress(percent); - } - } catch (error) { - console.error("Error processing file:", file.name, error); - toast.error(`Failed to process ${file.name}`); - URL.revokeObjectURL(url); // Clean up on error - } - } + completed += 1; + if (onProgress) { + const percent = Math.round((completed / total) * 100); + onProgress(percent); + } + } catch (error) { + console.error("Error processing file:", file.name, error); + toast.error(`Failed to process ${file.name}`); + URL.revokeObjectURL(url); // Clean up on error + } + } - return processedItems; + return processedItems; } -- cgit v1.3.1