File "generate-chapters-file.ts"
Full Path: /home/warrior1/public_html/wp-content/plugins/jetpack/extensions/blocks/videopress/video-chapters/utils/generate-chapters-file.ts
File size: 1.95 KB
MIME-type: text/x-java
Charset: utf-8
import { extractVideoChapters } from './extract-video-chapters';
/**
* Converts milliseconds duration to a string in the hh:mm:ss format
*
* @param {number} milliseconds - The duration in milliseconds
* @returns {string} - The formatted time
*/
function millisecondsToClockTime( milliseconds: number ) {
const hours = Math.floor( milliseconds / 3600000 );
let remaining = milliseconds - hours * 3600000;
const minutes = Math.floor( remaining / 60000 );
remaining = remaining - minutes * 60000;
const seconds = Math.floor( remaining / 1000 );
return [ hours, minutes, seconds ]
.map( value => ( value < 10 ? `0${ value }` : value ) )
.join( ':' );
}
/**
* Generates the contents of a WebVTT file from video data
*
* @param {string} description - The video description
* @param {number} videoDuration - The video duration, in milliseconds
* @returns {string} - WebVTT text content
*/
function generateChaptersFileContent(
description: string,
videoDuration = 359999000 // 99:59:59
): string | null {
const chapters = extractVideoChapters( description );
if ( chapters.length === 0 ) {
return null;
}
let content = 'WEBVTT\n';
let chapterCount = 1;
for ( const [ index, chapter ] of chapters.entries() ) {
const startMilliseconds = index === 0 ? '000' : '001';
const endAt =
index < chapters.length - 1
? chapters[ index + 1 ].startAt
: millisecondsToClockTime( videoDuration );
content += `\n${ chapterCount++ }\n${
chapter.startAt
}.${ startMilliseconds } --> ${ endAt }.000\n${ chapter.title }\n`;
}
return content;
}
export default function generateChaptersFile(
description: string,
videoDuration: number
): File | null {
const content = generateChaptersFileContent( description, videoDuration );
if ( ! content ) {
return null;
}
return new File( [ content ], 'chapters.vtt', { type: 'text/vtt' } );
}
export { millisecondsToClockTime, generateChaptersFileContent, generateChaptersFile };