Feat: more preferences (#106)

* add ffmpeg command check

* may switch language

* tweak
This commit is contained in:
an-lee
2024-01-14 16:54:15 +08:00
committed by GitHub
parent afb818f215
commit d2510d00cb
10 changed files with 212 additions and 14 deletions

View File

@@ -11,22 +11,37 @@ import storage from "@main/storage";
const logger = log.scope("ffmepg");
export default class FfmpegWrapper {
public ffmpeg: Ffmpeg.FfmpegCommand;
public config: any;
constructor() {
const config = settings.ffmpegConfig();
this.config = settings.ffmpegConfig();
if (config.commandExists) {
if (this.config.commandExists) {
logger.info("Using system ffmpeg");
this.ffmpeg = Ffmpeg();
} else {
logger.info("Using downloaded ffmpeg");
const ff = Ffmpeg();
ff.setFfmpegPath(config.ffmpegPath);
ff.setFfprobePath(config.ffprobePath);
ff.setFfmpegPath(this.config.ffmpegPath);
ff.setFfprobePath(this.config.ffprobePath);
this.ffmpeg = ff;
}
}
checkCommand() {
return new Promise((resolve, _reject) => {
this.ffmpeg.getAvailableFormats((err, formats) => {
if (err) {
logger.error("Command not valid:", err);
resolve(false);
} else {
logger.info("Command valid, available formats:", formats);
resolve(true);
}
});
});
}
generateMetadata(input: string): Promise<Ffmpeg.FfprobeData> {
return new Promise((resolve, reject) => {
this.ffmpeg
@@ -292,9 +307,29 @@ export class FfmpegDownloader {
logger.error(err);
event.sender.send("on-notification", {
type: "error",
title: `FFmpeg download failed: ${err.message}`,
message: `FFmpeg download failed: ${err.message}`,
});
}
});
ipcMain.handle("ffmpeg-check-command", async (event) => {
const ffmpeg = new FfmpegWrapper();
const valid = await ffmpeg.checkCommand();
if (valid) {
event.sender.send("on-notification", {
type: "success",
message: `FFmpeg command valid, you're ready to go.`,
});
} else {
logger.error("FFmpeg command not valid", ffmpeg.config);
event.sender.send("on-notification", {
type: "warning",
message: `FFmpeg command not valid, please check the log for detail.`,
});
}
return valid;
});
}
}