/* * Copyright (C) 2025 - present Instructure, Inc. * * This file is part of Canvas. * * Canvas is free software: you can redistribute it and/or modify it under * the terms of the GNU Affero General Public License as published by the Free * Software Foundation, version 3 of the License. * * Canvas is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR * A PARTICULAR PURPOSE. See the GNU Affero General Public License for more * details. * * You should have received a copy of the GNU Affero General Public License along * with this program. If not, see . */ import {CC_FILE_MAX_BYTES} from '../../shared/constants' import { type ClosedCaptionPanelTranslations, defaultClosedCaptionPanelTranslations, } from '../translations' import type {ValidationResult} from '../types' export function validateCaptionFile( file: File, translations: ClosedCaptionPanelTranslations = defaultClosedCaptionPanelTranslations, ): ValidationResult { if (file.size > CC_FILE_MAX_BYTES) { return { valid: false, error: translations.fileSizeExceeded({maxSize: CC_FILE_MAX_BYTES}), } } const validExtensions = ['.vtt', '.srt'] const fileName = file.name.toLowerCase() const hasValidExtension = validExtensions.some(ext => fileName.endsWith(ext)) if (!hasValidExtension) { return { valid: false, error: translations.invalidFileType(), } } return {valid: true} }