summaryrefslogtreecommitdiff
path: root/apps/web/src/lib/media-processing.ts
diff options
context:
space:
mode:
authorPriyankar Pal <88102392+priyankarpal@users.noreply.github.com>2025-06-26 11:35:55 +0530
committerGitHub <noreply@github.com>2025-06-26 11:35:55 +0530
commit4ed9858725ebfbc95f6e470e118b37aa1079f7d0 (patch)
treeae63f6e77cf738cab0a56e9eb865839742b9d163 /apps/web/src/lib/media-processing.ts
parentc322ad1124aea02169b2094498cac5b6da54dd5b (diff)
parenta8d6bbd03a4c5a89075d75ea37b61afa5efe373a (diff)
downloadopencut-4ed9858725ebfbc95f6e470e118b37aa1079f7d0.tar.gz
Merge branch 'main' into split-issue-83
Diffstat (limited to 'apps/web/src/lib/media-processing.ts')
-rw-r--r--apps/web/src/lib/media-processing.ts15
1 files changed, 14 insertions, 1 deletions
diff --git a/apps/web/src/lib/media-processing.ts b/apps/web/src/lib/media-processing.ts
index d241f411..daf22b34 100644
--- a/apps/web/src/lib/media-processing.ts
+++ b/apps/web/src/lib/media-processing.ts
@@ -11,11 +11,15 @@ import {
export interface ProcessedMediaItem extends Omit<MediaItem, "id"> {}
export async function processMediaFiles(
- files: FileList | File[]
+ files: FileList | File[],
+ onProgress?: (progress: number) => void
): Promise<ProcessedMediaItem[]> {
const fileArray = Array.from(files);
const processedItems: ProcessedMediaItem[] = [];
+ const total = fileArray.length;
+ let completed = 0;
+
for (const file of fileArray) {
const fileType = getFileType(file);
@@ -57,6 +61,15 @@ export async function processMediaFiles(
duration,
aspectRatio,
});
+
+ // 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}`);