fix: organisation utilise l'extension du fichier au lieu de tester si ça existe
This commit is contained in:
1 parent
c94ff7da3f
commit
21bcb2ba23
1 file changed
+25
-18
+25
-18
@@ -64,7 +64,8 @@ export async function scanMediaPath(
|
|||||||
|
|
||||||
logger.info('organize', `Scan de la médiathèque : ${mediaPath}`)
|
logger.info('organize', `Scan de la médiathèque : ${mediaPath}`)
|
||||||
|
|
||||||
// Map : nom_sur_disque → { hash, srcFilename, episodeId, season, episode }
|
// Map : nom_sans_extension → { hash, srcFilename, episodeId, season, episode }
|
||||||
|
// On indexe par nom sans extension pour matcher quelle que soit l'extension sur le disque
|
||||||
const filenameIndex = new Map<string, {
|
const filenameIndex = new Map<string, {
|
||||||
hash : string
|
hash : string
|
||||||
srcFilename : string
|
srcFilename : string
|
||||||
@@ -85,7 +86,6 @@ export async function scanMediaPath(
|
|||||||
const srcFilename = p.path.replace(/\\/g, '/').split('/').pop()
|
const srcFilename = p.path.replace(/\\/g, '/').split('/').pop()
|
||||||
if (!srcFilename) continue
|
if (!srcFilename) continue
|
||||||
|
|
||||||
const srcExt = path.extname(srcFilename)
|
|
||||||
const entry = {
|
const entry = {
|
||||||
hash,
|
hash,
|
||||||
srcFilename,
|
srcFilename,
|
||||||
@@ -95,24 +95,25 @@ export async function scanMediaPath(
|
|||||||
destFilename: srcFilename,
|
destFilename: srcFilename,
|
||||||
}
|
}
|
||||||
|
|
||||||
// 1. Nom brut source
|
// Helper : indexer par nom sans extension
|
||||||
filenameIndex.set(srcFilename, entry)
|
const idx = (filename: string, destFilename?: string) => {
|
||||||
|
const base = filename.replace(/\.[^.]+$/, '')
|
||||||
// 2. nfo_filename avec extension swappée
|
filenameIndex.set(base, { ...entry, destFilename: destFilename ?? filename })
|
||||||
if (ep.nfo_filename) {
|
|
||||||
const nfoRenamed = swapExt(ep.nfo_filename, srcExt)
|
|
||||||
filenameIndex.set(nfoRenamed, { ...entry, destFilename: nfoRenamed })
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 1. Nom brut source
|
||||||
|
idx(srcFilename)
|
||||||
|
|
||||||
|
// 2. nfo_filename (sans extension — le swap se fera au moment du match)
|
||||||
|
if (ep.nfo_filename) idx(ep.nfo_filename)
|
||||||
|
|
||||||
// 3. original_filename
|
// 3. original_filename
|
||||||
if (ep.original_filename) {
|
if (ep.original_filename) idx(ep.original_filename)
|
||||||
filenameIndex.set(ep.original_filename, { ...entry, destFilename: ep.original_filename })
|
|
||||||
}
|
|
||||||
|
|
||||||
// 4. formatted_name + .mkv
|
// 4. formatted_name
|
||||||
if (ep.formatted_name?.trim()) {
|
if (ep.formatted_name?.trim()) {
|
||||||
const fmtName = ep.formatted_name.replace(/[<>:"/\\|?*]/g, '').trim() + '.mkv'
|
const fmtBase = ep.formatted_name.replace(/[<>:"/\\|?*]/g, '').trim()
|
||||||
filenameIndex.set(fmtName, { ...entry, destFilename: fmtName })
|
filenameIndex.set(fmtBase, { ...entry, destFilename: fmtBase })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -136,12 +137,18 @@ export async function scanMediaPath(
|
|||||||
const full = path.join(dir, entry.name)
|
const full = path.join(dir, entry.name)
|
||||||
if (entry.isDirectory()) {
|
if (entry.isDirectory()) {
|
||||||
walk(full)
|
walk(full)
|
||||||
} else if (entry.isFile() && entry.name.endsWith('.mkv')) {
|
} else if (entry.isFile() && /\.(mkv|mp4|avi|m4v|mov|wmv)$/i.test(entry.name)) {
|
||||||
result.found++
|
result.found++
|
||||||
const match = filenameIndex.get(entry.name)
|
// Chercher par nom sans extension pour matcher quelle que soit l'extension
|
||||||
|
const nameWithoutExt = entry.name.replace(/\.[^.]+$/, '')
|
||||||
|
const match = filenameIndex.get(nameWithoutExt)
|
||||||
if (!match) continue
|
if (!match) continue
|
||||||
|
|
||||||
const { hash, srcFilename, episodeId, season, episode, destFilename } = match
|
const { hash, srcFilename, episodeId, season, episode } = match
|
||||||
|
// Le destFilename prend l'extension réelle du fichier sur le disque
|
||||||
|
const realExt = path.extname(entry.name)
|
||||||
|
const destBase = match.destFilename.replace(/\.[^.]+$/, '')
|
||||||
|
const destFilename = destBase + realExt
|
||||||
presentFiles.add(`${hash}:${episodeId}`)
|
presentFiles.add(`${hash}:${episodeId}`)
|
||||||
|
|
||||||
if (organized[hash]?.[String(episodeId)]) continue
|
if (organized[hash]?.[String(episodeId)]) continue
|
||||||
|
|||||||
Reference in new issue
Block a user