Merge branch 'main' into release
This commit is contained in:
commit
65af520b09
|
@ -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) => {
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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);
|
||||||
});
|
});
|
||||||
|
|
|
@ -28,11 +28,11 @@ function generateTempName(length: number) {
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function generateTempFilePath(formatSuffix: string) {
|
export async function generateTempFilePath(formatSuffix: string) {
|
||||||
|
let tempFilePath: string;
|
||||||
|
do {
|
||||||
const tempDirPath = await getTempDirPath();
|
const tempDirPath = await getTempDirPath();
|
||||||
const namePrefix = generateTempName(10);
|
const namePrefix = generateTempName(10);
|
||||||
const tempFilePath = path.join(
|
tempFilePath = path.join(tempDirPath, namePrefix + '-' + formatSuffix);
|
||||||
tempDirPath,
|
} while (existsSync(tempFilePath));
|
||||||
namePrefix + '-' + formatSuffix
|
|
||||||
);
|
|
||||||
return tempFilePath;
|
return tempFilePath;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue