video-clerk
Advanced tools
Comparing version 1.0.1 to 1.1.0
@@ -67,11 +67,15 @@ const fs = require('fs') | ||
// followed by a season and episode number separated by dots, spaces, or | ||
// hyphens wrapped in spaces. Examples: | ||
// hyphens wrapped in spaces. Two episodes within the same file can be | ||
// specified. Examples: | ||
// - Harley.Quinn.S02E04.720p.mkv | ||
// - Harley Quinn S02E04.mkv | ||
// - Harley Quinn S02E04-E05.mkv | ||
// - Harley Quinn - S02E04.mkv | ||
// - Harley Quinn - S02E04-E05.mkv | ||
// - Peacemaker.2022.S01E02.720p.mkv | ||
// - Peacemaker (2022) S01E02.mkv | ||
// - Peacemaker (2022) S01E02-E03.mkv | ||
// - Peacemaker (2022) - S01E02.mkv | ||
const showTitleRegExp = | ||
/^(.+?)[. ](?:\(?(?:\d{4})\)?(?:[. ]|\s+-\s+))?S(\d\d)E(\d\d)[. ]/i | ||
/^(.+?)[. ](?:\(?(?:\d{4})\)?(?:[. ]|\s+-\s+))?S(\d\d)E(\d\d)(?:-?E(\d\d))?[. ]/i | ||
@@ -86,2 +90,3 @@ // TV show filenames with similar titles are matched to the same TMDb show | ||
let episodeNumber | ||
let secondEpisodeNumber | ||
@@ -104,2 +109,3 @@ let result | ||
episodeNumber = Number(filenameMatch[3]) | ||
secondEpisodeNumber = Number(filenameMatch[4]) | ||
} | ||
@@ -189,2 +195,3 @@ } else { | ||
let episodeID | ||
let secondEpisodeID | ||
@@ -203,2 +210,14 @@ // Ensure that the episode number matched in the filename exists in | ||
// If a second episode was matched, ensure that the episode number | ||
// matched in the filename exists in the database. | ||
if (secondEpisodeNumber != null) { | ||
const secondEpisodeData = seasonData.episodes.find( | ||
e => e.episode_number === secondEpisodeNumber, | ||
) | ||
if (secondEpisodeData) { | ||
secondEpisodeID = secondEpisodeData.id | ||
} | ||
} | ||
// If the episode number wasn't matched, or if the matched episode | ||
@@ -209,3 +228,5 @@ // number doesn't exist in the database, prompt the user to choose the | ||
episodeNumber = await promptList( | ||
`Unabled to determine episode for ${filename}. Please choose one.`, | ||
`Unabled to determine ${ | ||
secondEpisodeNumber != null ? 'first ' : '' | ||
}episode for ${filename}. Please choose one.`, | ||
seasonData.episodes.map(e => ({ | ||
@@ -218,2 +239,15 @@ name: `${pad(e.episode_number)} ${e.name}`, | ||
// If the second episode number wasn't matched, or if the matched | ||
// episode number doesn't exist in the database, prompt the user to | ||
// choose the correct episode. | ||
if (secondEpisodeID == null && secondEpisodeNumber != null) { | ||
secondEpisodeNumber = await promptList( | ||
`Unabled to determine second episode for ${filename}. Please choose one.`, | ||
seasonData.episodes.map(e => ({ | ||
name: `${pad(e.episode_number)} ${e.name}`, | ||
value: e.episode_number, | ||
})), | ||
) | ||
} | ||
// Remove or replace any invalid path characters in the episode title. | ||
@@ -224,2 +258,11 @@ episodeTitle = scrubTitle( | ||
) | ||
// If a second episode was matched, add its name to the episode title. | ||
if (secondEpisodeID != null) { | ||
episodeTitle += ` & ${scrubTitle( | ||
seasonData.episodes.find( | ||
e => e.episode_number === secondEpisodeNumber, | ||
).name, | ||
)}` | ||
} | ||
} | ||
@@ -261,5 +304,7 @@ | ||
`Season ${pad(seasonNumber)}`, | ||
`${title} - S${pad(seasonNumber)}E${pad( | ||
episodeNumber, | ||
)} - ${episodeTitle}${ext}`, | ||
`${title} - S${pad(seasonNumber)}E${pad(episodeNumber)}${ | ||
secondEpisodeNumber != null | ||
? `-E${pad(secondEpisodeNumber)}` | ||
: '' | ||
} - ${episodeTitle}${ext}`, | ||
) | ||
@@ -266,0 +311,0 @@ |
{ | ||
"name": "video-clerk", | ||
"version": "1.0.1", | ||
"version": "1.1.0", | ||
"description": "A CLI for organizing movie and TV show files", | ||
@@ -5,0 +5,0 @@ "bin": "lib/index.js", |
22432
530