update to handle inputFilePath missing

This commit is contained in:
Abhinav 2022-11-14 20:37:13 +05:30
parent 007e491143
commit 75ce357b72
3 changed files with 42 additions and 12 deletions

View file

@ -3,14 +3,22 @@ import { ElectronFile } from '../types';
export async function runFFmpegCmd( export async function runFFmpegCmd(
cmd: string[], cmd: string[],
inputFile: ElectronFile, inputFile: File | ElectronFile,
outputFileName: string outputFileName: string
) { ) {
const fileData = await ipcRenderer.invoke( let inputFilePath = null;
let inputFileData = null;
if (inputFile instanceof File) {
inputFileData = new Uint8Array(await inputFile.arrayBuffer());
} else {
inputFilePath = inputFile.path;
}
const outputFileData = await ipcRenderer.invoke(
'run-ffmpeg-cmd', 'run-ffmpeg-cmd',
cmd, cmd,
inputFile.path, inputFilePath,
inputFileData,
outputFileName outputFileName
); );
return new File([fileData], outputFileName); return new File([outputFileData], outputFileName);
} }

View file

@ -3,7 +3,7 @@ import path from 'path';
const shellescape = require('any-shell-escape'); const shellescape = require('any-shell-escape');
import util from 'util'; import util from 'util';
import log from 'electron-log'; import log from 'electron-log';
import { readFile, rmSync } from 'promise-fs'; import { readFile, rmSync, writeFile } from 'promise-fs';
import { logErrorSentry } from './sentry'; import { logErrorSentry } from './sentry';
import { generateTempName, getTempDirPath } from '../utils/temp'; import { generateTempName, getTempDirPath } from '../utils/temp';
@ -20,13 +20,22 @@ function getFFmpegStaticPath() {
export async function runFFmpegCmd( export async function runFFmpegCmd(
cmd: string[], cmd: string[],
inputFilePath: string, inputFilePath: string,
inputFileData: Uint8Array,
inputFileName: string,
outputFileName: string outputFileName: string
) { ) {
let tempOutputFilePath: string; let outputFilePath: string;
try { try {
const tempDirPath = await getTempDirPath(); const tempDirPath = await getTempDirPath();
const tempName = generateTempName(10); const tempName = generateTempName(10);
tempOutputFilePath = path.join( if (!inputFilePath) {
inputFilePath = path.join(
tempDirPath,
tempName + '-' + inputFileName
);
await writeFile(inputFilePath, inputFileData);
}
outputFilePath = path.join(
tempDirPath, tempDirPath,
tempName + '-' + outputFileName tempName + '-' + outputFileName
); );
@ -37,7 +46,7 @@ export async function runFFmpegCmd(
} else if (cmdPart === INPUT_PATH_PLACEHOLDER) { } else if (cmdPart === INPUT_PATH_PLACEHOLDER) {
return inputFilePath; return inputFilePath;
} else if (cmdPart === OUTPUT_PATH_PLACEHOLDER) { } else if (cmdPart === OUTPUT_PATH_PLACEHOLDER) {
return tempOutputFilePath; return outputFilePath;
} else { } else {
return cmdPart; return cmdPart;
} }
@ -45,13 +54,13 @@ export async function runFFmpegCmd(
cmd = shellescape(cmd); cmd = shellescape(cmd);
log.info('cmd', cmd); log.info('cmd', cmd);
await execAsync(cmd); await execAsync(cmd);
return new Uint8Array(await readFile(tempOutputFilePath)); return new Uint8Array(await readFile(outputFilePath));
} catch (e) { } catch (e) {
logErrorSentry(e, 'ffmpeg run command error'); logErrorSentry(e, 'ffmpeg run command error');
throw e; throw e;
} finally { } finally {
try { try {
rmSync(tempOutputFilePath); rmSync(outputFilePath);
} catch (e) { } catch (e) {
logErrorSentry(e, 'failed to remove tempOutputFile'); logErrorSentry(e, 'failed to remove tempOutputFile');
} }

View file

@ -129,8 +129,21 @@ export default function setupIpcComs(
ipcMain.handle( ipcMain.handle(
'run-ffmpeg-cmd', 'run-ffmpeg-cmd',
(_, cmd: string[], inputFilePath: string, outputFileName: string) => { (
return runFFmpegCmd(cmd, inputFilePath, outputFileName); _,
cmd: string[],
inputFilePath,
inputFileData,
inputFileName,
outputFileName
) => {
return runFFmpegCmd(
cmd,
inputFilePath,
inputFileData,
inputFileName,
outputFileName
);
} }
); );
} }