MCPcopy
hub / github.com/CapSoftware/Cap / validateAndSetFile

Function validateAndSetFile

apps/web/components/tools/MediaFormatConverter.tsx:252–301  ·  view source on GitHub ↗
(selectedFile: File)

Source from the content-addressed store, hash-verified

250 };
251
252 const validateAndSetFile = (selectedFile: File) => {
253 setError(null);
254 setOutputUrl(null);
255
256 const expectedMimeType = getMimeType(currentSourceFormat);
257
258 let isValidType = false;
259
260 if (currentSourceFormat === "mov") {
261 isValidType =
262 selectedFile.type === "video/quicktime" ||
263 selectedFile.type === "video/mov" ||
264 selectedFile.name.toLowerCase().endsWith(".mov");
265 } else if (currentSourceFormat === "mkv") {
266 isValidType =
267 selectedFile.type === "video/x-matroska" ||
268 selectedFile.name.toLowerCase().endsWith(".mkv");
269 } else if (currentSourceFormat === "avi") {
270 isValidType =
271 selectedFile.type === "video/x-msvideo" ||
272 selectedFile.type === "video/avi" ||
273 selectedFile.name.toLowerCase().endsWith(".avi");
274 } else {
275 isValidType =
276 selectedFile.type === expectedMimeType ||
277 selectedFile.type.includes(currentSourceFormat) ||
278 selectedFile.name.toLowerCase().endsWith(`.${currentSourceFormat}`);
279 }
280
281 if (!isValidType) {
282 setError(`Please select a ${currentSourceFormat.toUpperCase()} file.`);
283 trackEvent(`${conversionPath}_invalid_file_type`, {
284 fileType: selectedFile.type,
285 });
286 return;
287 }
288
289 if (selectedFile.size > 500 * 1024 * 1024) {
290 setError("File size exceeds 500MB limit.");
291 trackEvent(`${conversionPath}_file_too_large`, {
292 fileSize: selectedFile.size,
293 });
294 return;
295 }
296
297 setFile(selectedFile);
298 trackEvent(`${conversionPath}_file_selected`, {
299 fileSize: selectedFile.size,
300 });
301 };
302
303 const handleDragOver = (e: React.DragEvent) => {
304 e.preventDefault();

Callers 2

handleFileChangeFunction · 0.70
handleDropFunction · 0.70

Calls 2

trackEventFunction · 0.90
getMimeTypeFunction · 0.85

Tested by

no test coverage detected