Skip to content

Commit 11377f5

Browse files
committed
fix(video): do not treat unknown FFmpeg version as not installed
ref #1194
1 parent 57ac6d5 commit 11377f5

File tree

8 files changed

+18
-10
lines changed

8 files changed

+18
-10
lines changed

src/node/video/ffmpeg/get-ffmpeg-version-from-executable.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
import { exec } from 'node:child_process';
22
import { InvalidFfmpegExecutable } from 'csdm/node/video/errors/invalid-ffmpeg-executable';
33

4-
export async function getFfmpegVersionFromExecutable(executablePath: string): Promise<string | undefined> {
4+
export type FfmpegVersion = (string & {}) | '?';
5+
6+
export async function getFfmpegVersionFromExecutable(executablePath: string): Promise<FfmpegVersion> {
57
return new Promise((resolve, reject) => {
68
exec(`"${executablePath}" -version`, { windowsHide: true }, (error, stdout) => {
79
if (error !== null) {
@@ -24,7 +26,7 @@ export async function getFfmpegVersionFromExecutable(executablePath: string): Pr
2426

2527
logger.warn(`Can't find FFmpeg version from stdout:`);
2628
logger.log(stdout);
27-
return reject(new InvalidFfmpegExecutable());
29+
return resolve('?');
2830
});
2931
});
3032
}

src/node/video/ffmpeg/get-installed-ffmpeg-version.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import fs from 'fs-extra';
22
import { InvalidFfmpegExecutable } from 'csdm/node/video/errors/invalid-ffmpeg-executable';
33
import { getFfmpegExecutablePath } from './ffmpeg-location';
4-
import { getFfmpegVersionFromExecutable } from './get-ffmpeg-version-from-executable';
4+
import { getFfmpegVersionFromExecutable, type FfmpegVersion } from './get-ffmpeg-version-from-executable';
55

6-
export async function getInstalledFfmpegVersion(): Promise<string | undefined> {
6+
export async function getInstalledFfmpegVersion(): Promise<FfmpegVersion | undefined> {
77
const ffmpegExecutablePath = await getFfmpegExecutablePath();
88
const ffmpegExecutableExists = await fs.pathExists(ffmpegExecutablePath);
99
if (!ffmpegExecutableExists) {

src/node/video/ffmpeg/is-ffmpeg-update-available.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { getInstalledFfmpegVersion } from 'csdm/node/video/ffmpeg/get-installed-
33

44
export async function isFfmpegUpdateAvailable(): Promise<boolean> {
55
const installedVersion = await getInstalledFfmpegVersion();
6-
if (installedVersion === undefined) {
6+
if (installedVersion === undefined || installedVersion === '?') {
77
return false;
88
}
99

src/server/handlers/renderer-process/settings/disable-ffmpeg-custom-location-handler.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import type { FfmpegVersionChangedPayload } from './ffmpeg-version-changed-paylo
1111
export async function disableFfmpegCustomLocationHandler(clearCustomLocation?: boolean) {
1212
const payload: FfmpegVersionChangedPayload = {
1313
errorCode: undefined,
14-
version: undefined,
14+
version: '?',
1515
isUpdateAvailable: false,
1616
};
1717

@@ -38,7 +38,7 @@ export async function disableFfmpegCustomLocationHandler(clearCustomLocation?: b
3838

3939
const version = await getFfmpegVersionFromExecutable(defaultFfmpegExecutablePath);
4040
let isUpdateAvailable = false;
41-
if (version !== undefined) {
41+
if (version !== '?') {
4242
isUpdateAvailable = await checkForFfmpegUpdate(version);
4343
}
4444

src/server/handlers/renderer-process/settings/enable-ffmpeg-custom-location-handler.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { FileNotFound } from 'csdm/node/filesystem/errors/file-not-found';
55
import type { FfmpegSettings } from 'csdm/node/settings/settings';
66
import type { FfmpegVersionChangedPayload } from './ffmpeg-version-changed-payload';
77
import { handleError } from '../../handle-error';
8+
import { InvalidFfmpegExecutable } from 'csdm/node/video/errors/invalid-ffmpeg-executable';
89

910
export async function enableFfmpegCustomLocationHandler(customExecutablePath: string) {
1011
try {
@@ -14,6 +15,9 @@ export async function enableFfmpegCustomLocationHandler(customExecutablePath: st
1415
}
1516

1617
const version = await getFfmpegVersionFromExecutable(customExecutablePath);
18+
if (version === '?') {
19+
throw new InvalidFfmpegExecutable();
20+
}
1721

1822
const ffmpegSettings: Partial<FfmpegSettings> = {
1923
customLocationEnabled: true,
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import type { ErrorCode } from 'csdm/common/error-code';
2+
import type { FfmpegVersion } from 'csdm/node/video/ffmpeg/get-ffmpeg-version-from-executable';
23

34
export type FfmpegVersionChangedPayload = {
45
errorCode: ErrorCode | undefined;
5-
version: string | undefined;
6+
version: FfmpegVersion;
67
isUpdateAvailable: boolean;
78
};

src/ui/match/video/ffmpeg/ffmpeg-reducer.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@ import { createReducer } from '@reduxjs/toolkit';
22
import { initializeVideoSuccess } from 'csdm/ui/match/video/video-actions';
33
import { ffmpegVersionChanged } from 'csdm/ui/settings/settings-actions';
44
import { installFfmpegSuccess, updateFfmpegSuccess } from './ffmpeg-actions';
5+
import type { FfmpegVersion } from 'csdm/node/video/ffmpeg/get-ffmpeg-version-from-executable';
56

67
export type FfmpegState = {
78
isUpdateAvailable: boolean;
8-
version: string | undefined;
9+
version: FfmpegVersion | undefined;
910
};
1011

1112
const initialState: FfmpegState = {

src/ui/match/video/ffmpeg/use-installed-ffmpeg-version.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { useFfmpegState } from './use-ffmpeg-state';
22

3-
export function useInstalledFfmpegVersion(): string | undefined {
3+
export function useInstalledFfmpegVersion() {
44
const ffmpegState = useFfmpegState();
55

66
return ffmpegState.version;

0 commit comments

Comments
 (0)