moved temp file creation logic to api
This commit is contained in:
parent
3e28a7cb82
commit
bdaa505518
|
@ -1,4 +1,6 @@
|
||||||
import { ipcRenderer } from 'electron';
|
import { ipcRenderer } from 'electron';
|
||||||
|
import { logErrorSentry } from '../services/sentry';
|
||||||
|
import { deleteTempFile, writeTempFile } from '../services/fs';
|
||||||
import { ElectronFile } from '../types';
|
import { ElectronFile } from '../types';
|
||||||
|
|
||||||
export async function runFFmpegCmd(
|
export async function runFFmpegCmd(
|
||||||
|
@ -7,11 +9,12 @@ export async function runFFmpegCmd(
|
||||||
outputFileName: string
|
outputFileName: string
|
||||||
) {
|
) {
|
||||||
let inputFilePath = null;
|
let inputFilePath = null;
|
||||||
let inputFileData = null;
|
let createdTempInputFile = null;
|
||||||
let inputFileName = null;
|
try {
|
||||||
if (!inputFile.path) {
|
if (!inputFile.path) {
|
||||||
inputFileData = new Uint8Array(await inputFile.arrayBuffer());
|
const inputFileData = new Uint8Array(await inputFile.arrayBuffer());
|
||||||
inputFileName = inputFile.name;
|
inputFilePath = await writeTempFile(inputFileData, inputFile.name);
|
||||||
|
createdTempInputFile = true;
|
||||||
} else {
|
} else {
|
||||||
inputFilePath = inputFile.path;
|
inputFilePath = inputFile.path;
|
||||||
}
|
}
|
||||||
|
@ -19,9 +22,16 @@ export async function runFFmpegCmd(
|
||||||
'run-ffmpeg-cmd',
|
'run-ffmpeg-cmd',
|
||||||
cmd,
|
cmd,
|
||||||
inputFilePath,
|
inputFilePath,
|
||||||
inputFileData,
|
|
||||||
inputFileName,
|
|
||||||
outputFileName
|
outputFileName
|
||||||
);
|
);
|
||||||
return new File([outputFileData], outputFileName);
|
return new File([outputFileData], outputFileName);
|
||||||
|
} finally {
|
||||||
|
if (createdTempInputFile) {
|
||||||
|
try {
|
||||||
|
deleteTempFile(inputFilePath);
|
||||||
|
} catch (e) {
|
||||||
|
logErrorSentry(e, 'failed to deleteTempFile');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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, writeFile } from 'promise-fs';
|
import { readFile, rmSync } from 'promise-fs';
|
||||||
import { logErrorSentry } from './sentry';
|
import { logErrorSentry } from './sentry';
|
||||||
import { generateTempName, getTempDirPath } from '../utils/temp';
|
import { generateTempName, getTempDirPath } from '../utils/temp';
|
||||||
|
|
||||||
|
@ -20,22 +20,13 @@ 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 outputFilePath: string;
|
let tempOutputFilePath: string;
|
||||||
try {
|
try {
|
||||||
const tempDirPath = await getTempDirPath();
|
const tempDirPath = await getTempDirPath();
|
||||||
const tempName = generateTempName(10);
|
const tempName = generateTempName(10);
|
||||||
if (!inputFilePath) {
|
tempOutputFilePath = path.join(
|
||||||
inputFilePath = path.join(
|
|
||||||
tempDirPath,
|
|
||||||
tempName + '-' + inputFileName
|
|
||||||
);
|
|
||||||
await writeFile(inputFilePath, inputFileData);
|
|
||||||
}
|
|
||||||
outputFilePath = path.join(
|
|
||||||
tempDirPath,
|
tempDirPath,
|
||||||
tempName + '-' + outputFileName
|
tempName + '-' + outputFileName
|
||||||
);
|
);
|
||||||
|
@ -46,7 +37,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 outputFilePath;
|
return tempOutputFilePath;
|
||||||
} else {
|
} else {
|
||||||
return cmdPart;
|
return cmdPart;
|
||||||
}
|
}
|
||||||
|
@ -54,13 +45,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(outputFilePath));
|
return new Uint8Array(await readFile(tempOutputFilePath));
|
||||||
} 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(outputFilePath);
|
rmSync(tempOutputFilePath);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
logErrorSentry(e, 'failed to remove tempOutputFile');
|
logErrorSentry(e, 'failed to remove tempOutputFile');
|
||||||
}
|
}
|
||||||
|
|
|
@ -208,9 +208,5 @@ export async function deleteTempFile(tempFilePath: string) {
|
||||||
'tried to delete a non temp file'
|
'tried to delete a non temp file'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
try {
|
|
||||||
rmSync(tempFilePath);
|
rmSync(tempFilePath);
|
||||||
} catch (e) {
|
|
||||||
logErrorSentry(e, 'failed to deleteTempFile');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue