diff --git a/server/organize-worker.ts b/server/organize-worker.ts index 377acc2..aa4baf0 100644 --- a/server/organize-worker.ts +++ b/server/organize-worker.ts @@ -35,12 +35,12 @@ export interface OrgEntry { type Organized = Record> // ─── Settings ───────────────────────────────────────────────── -function readSettings(): { mediaPath: string; completePath: string; organizeMode: string; nfoSupport: boolean } { +function readSettings(): { mediaPath: string; completePath: string; organizeMode: string; nfoSupport: boolean, englishDirectory: boolean } { try { const p = path.join(DATA_DIR, 'settings.json') - if (!fs.existsSync(p)) return { mediaPath: '', completePath: '', organizeMode: 'hardlink', nfoSupport: false } + if (!fs.existsSync(p)) return { mediaPath: '', completePath: '', organizeMode: 'hardlink', nfoSupport: false, englishDirectory: false } return JSON.parse(fs.readFileSync(p, 'utf-8')) - } catch { return { mediaPath: '', completePath: '', organizeMode: 'hardlink', nfoSupport: false } } + } catch { return { mediaPath: '', completePath: '', organizeMode: 'hardlink', nfoSupport: false , englishDirectory: false } } } // ─── Organized log ──────────────────────────────────────────── @@ -302,7 +302,8 @@ function swapExtension(filename: string, ext: string): string { } function seasonFolder(n: number): string { - return n === 0 ? 'Specials' : `Saison ${n}` + const { englishDirectory } = readSettings() + return n === 0 ? 'Specials' : (englishDirectory ? `Season ${String(n).padStart(2, '0')}` : `Saison ${n}`) } /** diff --git a/server/routes/settings.ts b/server/routes/settings.ts index 3286ba5..506e683 100644 --- a/server/routes/settings.ts +++ b/server/routes/settings.ts @@ -10,7 +10,7 @@ router.get('/settings', requireAuth, (_req, res) => { }) router.post('/settings', requireAuth, (req, res) => { - const { mediaPath, completePath, organizeMode, category, nfoSupport, autoImport, devMode, deleteTorrentOnMove, autoUnimportMissing, requestAutoDownloadUsers } = req.body + const { mediaPath, completePath, organizeMode, category, nfoSupport, autoImport, devMode, deleteTorrentOnMove, autoUnimportMissing, requestAutoDownloadUsers, englishDirectory } = req.body const patch: Record = {} if (mediaPath !== undefined) patch.mediaPath = mediaPath if (completePath !== undefined) patch.completePath = completePath @@ -22,6 +22,7 @@ router.post('/settings', requireAuth, (req, res) => { if (deleteTorrentOnMove !== undefined) patch.deleteTorrentOnMove = deleteTorrentOnMove if (autoUnimportMissing !== undefined) patch.autoUnimportMissing = autoUnimportMissing if (requestAutoDownloadUsers !== undefined) patch.requestAutoDownloadUsers = requestAutoDownloadUsers + if (englishDirectory !== undefined) patch.englishDirectory = englishDirectory const updated = writeSettings(patch) logger.info('api', 'Paramètres mis à jour') res.json(updated) diff --git a/server/settings.ts b/server/settings.ts index ca858b5..2ce37d7 100644 --- a/server/settings.ts +++ b/server/settings.ts @@ -16,6 +16,7 @@ export interface Settings { requestAutoDownloadUsers: 'all' | string[] // IDs users autorisés au dl auto sur approbation ; [] = désactivé jellyfinUrl : string // URL du serveur Jellyfin (ex: http://jellyfin:8096) jellyfinAdminToken : string // Token admin Jellyfin pour la sync + englishDirectory : boolean // Si true, les dossiers de séries sont en anglais (ex: "Season 1" au lieu de "Saison 1") } const defaults: Settings = { @@ -30,6 +31,7 @@ const defaults: Settings = { requestAutoDownloadUsers: [], jellyfinUrl : '', jellyfinAdminToken : '', + englishDirectory : false, } export function readSettings(): Settings { diff --git a/src/views/settings/MediaManagementView.vue b/src/views/settings/MediaManagementView.vue index 53c4883..54c5ee2 100644 --- a/src/views/settings/MediaManagementView.vue +++ b/src/views/settings/MediaManagementView.vue @@ -103,6 +103,11 @@ label="Désimporter si fichier manquant" description="Si un fichier importé n'est plus trouvé sur le disque lors du scan, il est automatiquement retiré de la bibliothèque." /> + @@ -215,6 +220,7 @@ const form = ref({ autoImport : true, deleteTorrentOnMove : false, autoUnimportMissing : false, + englishDirectory : false, }) const picker = ref<{ open: boolean; field: 'completePath' | 'mediaPath'; currentPath: string }>({