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É".
40 lines
1.2 KiB
TypeScript
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
|
|
} |