Merge branch 'main' into release

This commit is contained in:
Abhinav 2023-01-12 10:11:35 +05:30
commit 65af520b09
6 changed files with 35 additions and 30 deletions

View file

@ -22,11 +22,11 @@ export const checkExistsAndRename = async (
} }
}; };
export const saveStreamToDisk = ( export const saveStreamToDisk = async (
filePath: string, filePath: string,
fileStream: ReadableStream<any> fileStream: ReadableStream<Uint8Array>
) => { ) => {
writeStream(filePath, fileStream); await writeStream(filePath, fileStream);
}; };
export const saveFileToDisk = async (path: string, fileData: any) => { export const saveFileToDisk = async (path: string, fileData: any) => {

View file

@ -1,5 +1,6 @@
import { ipcRenderer } from 'electron'; import { ipcRenderer } from 'electron';
import { existsSync } from 'fs'; import { existsSync } from 'fs';
import { writeStream } from '../services/fs';
import { logError } from '../services/logging'; import { logError } from '../services/logging';
import { ElectronFile } from '../types'; import { ElectronFile } from '../types';
@ -12,12 +13,12 @@ export async function runFFmpegCmd(
let createdTempInputFile = null; let createdTempInputFile = null;
try { try {
if (!existsSync(inputFile.path)) { if (!existsSync(inputFile.path)) {
const inputFileData = new Uint8Array(await inputFile.arrayBuffer()); const tempFilePath = await ipcRenderer.invoke(
inputFilePath = await ipcRenderer.invoke( 'get-temp-file-path',
'write-temp-file',
inputFileData,
inputFile.name inputFile.name
); );
await writeStream(tempFilePath, await inputFile.stream());
inputFilePath = tempFilePath;
createdTempInputFile = true; createdTempInputFile = true;
} else { } else {
inputFilePath = inputFile.path; inputFilePath = inputFile.path;

View file

@ -1,5 +1,6 @@
import { ipcRenderer } from 'electron/renderer'; import { ipcRenderer } from 'electron/renderer';
import { existsSync } from 'fs'; import { existsSync } from 'fs';
import { writeStream } from '../services/fs';
import { logError } from '../services/logging'; import { logError } from '../services/logging';
import { ElectronFile } from '../types'; import { ElectronFile } from '../types';
@ -20,12 +21,12 @@ export async function generateImageThumbnail(
let createdTempInputFile = null; let createdTempInputFile = null;
try { try {
if (!existsSync(inputFile.path)) { if (!existsSync(inputFile.path)) {
const inputFileData = new Uint8Array(await inputFile.arrayBuffer()); const tempFilePath = await ipcRenderer.invoke(
inputFilePath = await ipcRenderer.invoke( 'get-temp-file-path',
'write-temp-file',
inputFileData,
inputFile.name inputFile.name
); );
await writeStream(tempFilePath, await inputFile.stream());
inputFilePath = tempFilePath;
createdTempInputFile = true; createdTempInputFile = true;
} else { } else {
inputFilePath = inputFile.path; inputFilePath = inputFile.path;

View file

@ -192,7 +192,9 @@ export async function isFolder(dirPath: string) {
.catch(() => false); .catch(() => false);
} }
export const convertBrowserStreamToNode = (fileStream: any) => { export const convertBrowserStreamToNode = (
fileStream: ReadableStream<Uint8Array>
) => {
const reader = fileStream.getReader(); const reader = fileStream.getReader();
const rs = new Readable(); const rs = new Readable();
@ -210,10 +212,17 @@ export const convertBrowserStreamToNode = (fileStream: any) => {
return rs; return rs;
}; };
export function writeStream(filePath: string, fileStream: any) { export async function writeStream(
filePath: string,
fileStream: ReadableStream<Uint8Array>
) {
const writeable = fs.createWriteStream(filePath); const writeable = fs.createWriteStream(filePath);
const readable = convertBrowserStreamToNode(fileStream); const readable = convertBrowserStreamToNode(fileStream);
readable.pipe(writeable); readable.pipe(writeable);
await new Promise((resolve, reject) => {
writeable.on('finish', resolve);
writeable.on('error', reject);
});
} }
export async function readTextFile(filePath: string) { export async function readTextFile(filePath: string) {

View file

@ -23,11 +23,8 @@ import {
skipAppVersion, skipAppVersion,
updateAndRestart, updateAndRestart,
} from '../services/appUpdater'; } from '../services/appUpdater';
import { import { deleteTempFile, runFFmpegCmd } from '../services/ffmpeg';
deleteTempFile, import { generateTempFilePath } from './temp';
runFFmpegCmd,
writeTempFile,
} from '../services/ffmpeg';
export default function setupIpcComs( export default function setupIpcComs(
tray: Tray, tray: Tray,
@ -140,12 +137,9 @@ export default function setupIpcComs(
return runFFmpegCmd(cmd, inputFilePath, outputFileName); return runFFmpegCmd(cmd, inputFilePath, outputFileName);
} }
); );
ipcMain.handle( ipcMain.handle('get-temp-file-path', (_, formatSuffix) => {
'write-temp-file', return generateTempFilePath(formatSuffix);
(_, fileStream: Uint8Array, fileName: string) => { });
return writeTempFile(fileStream, fileName);
}
);
ipcMain.handle('remove-temp-file', (_, tempFilePath: string) => { ipcMain.handle('remove-temp-file', (_, tempFilePath: string) => {
return deleteTempFile(tempFilePath); return deleteTempFile(tempFilePath);
}); });

View file

@ -28,11 +28,11 @@ function generateTempName(length: number) {
} }
export async function generateTempFilePath(formatSuffix: string) { export async function generateTempFilePath(formatSuffix: string) {
const tempDirPath = await getTempDirPath(); let tempFilePath: string;
const namePrefix = generateTempName(10); do {
const tempFilePath = path.join( const tempDirPath = await getTempDirPath();
tempDirPath, const namePrefix = generateTempName(10);
namePrefix + '-' + formatSuffix tempFilePath = path.join(tempDirPath, namePrefix + '-' + formatSuffix);
); } while (existsSync(tempFilePath));
return tempFilePath; return tempFilePath;
} }