diff --git a/desktop/src/api/anime/anime.controller.ts b/desktop/src/api/anime/anime.controller.ts index 0bbec30..bfebb42 100644 --- a/desktop/src/api/anime/anime.controller.ts +++ b/desktop/src/api/anime/anime.controller.ts @@ -3,6 +3,7 @@ import * as animeService from './anime.service'; import { setActivity } from '../rpc/rp.service'; import { upsertListEntry } from '../list/list.service'; import {getExtension} from '../../shared/extensions'; +import { getConfig as loadConfig } from '../../shared/config'; import {Anime, AnimeRequest, SearchRequest, WatchStreamRequest} from '../types'; import {spawn} from "node:child_process"; import net from 'net'; @@ -138,6 +139,10 @@ export async function openInMPV(req: any, reply: any) { ); const pipe = `\\\\.\\pipe\\mpv-${Date.now()}`; + const { values } = loadConfig(); + + const MPV_PATH = + values.paths?.mpv || 'mpv'; let chaptersArg: string[] = []; if (chapters.length) { @@ -178,8 +183,12 @@ export async function openInMPV(req: any, reply: any) { chaptersArg = [`--chapters-file=${chaptersFile}`]; } + if (!MPV_PATH) { + return { error: 'MPV_NOT_CONFIGURED' }; + } + spawn( - 'D:\\mpv\\mpv.exe', + MPV_PATH, [ '--force-window=yes', '--idle=yes', diff --git a/desktop/src/api/local/download.service.ts b/desktop/src/api/local/download.service.ts index c5f6534..b17d14c 100644 --- a/desktop/src/api/local/download.service.ts +++ b/desktop/src/api/local/download.service.ts @@ -7,8 +7,10 @@ import fs from 'fs'; import path from 'path'; import AdmZip from 'adm-zip'; import { spawn } from 'child_process'; +const { values } = loadConfig(); -const FFMPEG_PATH = 'D:\\ffmpeg\\bin\\ffmpeg.exe'; +const FFMPEG_PATH = + values.paths?.ffmpeg || 'ffmpeg'; type AnimeDownloadParams = { anilistId: number; diff --git a/desktop/src/shared/config.js b/desktop/src/shared/config.js index b207231..1741424 100644 --- a/desktop/src/shared/config.js +++ b/desktop/src/shared/config.js @@ -55,18 +55,31 @@ export function getConfig() { }; } +function sanitizeLoadedConfig(loaded) { + return { + library: loaded.library, + paths: loaded.paths + }; +} + export function setConfig(partialConfig) { ensureConfigFile(); - const current = getConfig(); - const next = deepMerge(current, partialConfig); + const raw = fs.readFileSync(CONFIG_PATH, 'utf8'); + const loadedRaw = yaml.load(raw) || {}; + const loaded = sanitizeLoadedConfig(loadedRaw); - fs.writeFileSync( - CONFIG_PATH, - yaml.dump(next), - 'utf8' + const next = deepMerge( + structuredClone(DEFAULT_CONFIG), + deepMerge(loaded, partialConfig) ); + const toSave = { + library: next.library, + paths: next.paths + }; + + fs.writeFileSync(CONFIG_PATH, yaml.dump(toSave), 'utf8'); return next; } diff --git a/docker/src/api/local/download.service.ts b/docker/src/api/local/download.service.ts index c5f6534..b17d14c 100644 --- a/docker/src/api/local/download.service.ts +++ b/docker/src/api/local/download.service.ts @@ -7,8 +7,10 @@ import fs from 'fs'; import path from 'path'; import AdmZip from 'adm-zip'; import { spawn } from 'child_process'; +const { values } = loadConfig(); -const FFMPEG_PATH = 'D:\\ffmpeg\\bin\\ffmpeg.exe'; +const FFMPEG_PATH = + values.paths?.ffmpeg || 'ffmpeg'; type AnimeDownloadParams = { anilistId: number; diff --git a/docker/src/shared/config.js b/docker/src/shared/config.js index b207231..1741424 100644 --- a/docker/src/shared/config.js +++ b/docker/src/shared/config.js @@ -55,18 +55,31 @@ export function getConfig() { }; } +function sanitizeLoadedConfig(loaded) { + return { + library: loaded.library, + paths: loaded.paths + }; +} + export function setConfig(partialConfig) { ensureConfigFile(); - const current = getConfig(); - const next = deepMerge(current, partialConfig); + const raw = fs.readFileSync(CONFIG_PATH, 'utf8'); + const loadedRaw = yaml.load(raw) || {}; + const loaded = sanitizeLoadedConfig(loadedRaw); - fs.writeFileSync( - CONFIG_PATH, - yaml.dump(next), - 'utf8' + const next = deepMerge( + structuredClone(DEFAULT_CONFIG), + deepMerge(loaded, partialConfig) ); + const toSave = { + library: next.library, + paths: next.paths + }; + + fs.writeFileSync(CONFIG_PATH, yaml.dump(toSave), 'utf8'); return next; }