Files
FanKarr/server/settings.ts
T
MasutaYunikon c374ceb0a7 fix(organize): sanitisation des caractères spéciaux dans les noms de dossiers
Le titre "Kaguya-sama : Love is War Henshū" contenait un ":" qui causait
une troncation du nom de dossier sur certains systèmes de fichiers.
sanitizeDirName() remplace ":" par " -" et supprime les autres caractères
interdits (<>"/\|?*).

feat(settings): option titres optimisés Plex (title_for_plex)

Nouveau toggle "Noms de dossiers" dans les paramètres. Quand activé,
utilise le champ title_for_plex de l'API Fankai pour les noms de dossiers
au lieu du titre brut — évite les caractères spéciaux incompatibles avec
Plex et les systèmes de fichiers Windows/NTFS.

enrichSeriesDataWithOriginalFilenames fetche maintenant /series/{id} pour
injecter title_for_plex dans chaque serieData avant de passer au worker.

fix(organize): retry sur les erreurs réseau dans enrichSeriesDataWithOriginalFilenames

2 tentatives avec 500ms d'attente entre les deux pour les erreurs réseau
ponctuelles sur /seasons/{id}/episodes — évite que formatted_name soit null
à cause d'un timeout isolé au démarrage.

fix(catalogue): activeTorrents filtre désormais uniquement state=downloading

Les torrents en seeding étaient inclus dans activeTorrents, forçant
computeSerieDownloadState à retourner "downloading" même pour les séries
entièrement importées. Les badges affichaient "EN COURS" au lieu de "IMPORTÉ".
2026-03-24 19:18:51 +01:00

40 lines
1.2 KiB
TypeScript

import fs from 'fs'
import path from 'path'
import { DATA_DIR } from './config.js'
const DATA_PATH = path.join(DATA_DIR, 'settings.json')
export interface Settings {
mediaPath : string
completePath : string
organizeMode : 'hardlink' | 'move'
category : string
nfoSupport : boolean
autoImport : boolean
usePlexTitles : boolean // utilise title_for_plex pour les noms de dossiers
}
const defaults: Settings = {
mediaPath : '',
completePath : '',
organizeMode : 'hardlink',
category : 'fankai',
nfoSupport : false,
autoImport : true,
usePlexTitles: false,
}
export function readSettings(): Settings {
try {
if (!fs.existsSync(DATA_PATH)) return { ...defaults }
return { ...defaults, ...JSON.parse(fs.readFileSync(DATA_PATH, 'utf-8')) }
} catch { return { ...defaults } }
}
export function writeSettings(settings: Partial<Settings>): Settings {
const current = readSettings()
const updated = { ...current, ...settings }
fs.mkdirSync(path.dirname(DATA_PATH), { recursive: true })
fs.writeFileSync(DATA_PATH, JSON.stringify(updated, null, 2))
return updated
}