import ptn from 'parse-torrent-name';
class Parser {
/**
* @constructor
*/
constructor() {
this.formats = {
SPACE_FORMAT: /(.+)\s(\d{4})/,
BRACES_FORMAT: /(.+)\s?\((\d{4})\)/,
DOT_FORMAT: /([^.]+)\.(\d{4})/
}
}
/**
* Get movie name, year, resolution, quality and different info from a torrent file name.
* Powered by parse-torrent-name module.
* @param {string} movieFileName Movie file torrent name
* @returns {object} The movie info
*/
parseFromTorrentFileName(movieFileName) {
movieFileName = movieFileName.replace(/\.(mp4|mkv|avi|wmv|flv)/, '');
let rawInfo = ptn(movieFileName);
if (!rawInfo.title || !rawInfo.year) {
throw new Error('Movie info parsing failed');
}
return rawInfo;
}
/**
* Get a movie name & year from its filename that complies to certain format
* @param {string} movieFileName
* @param format Any of the format value from `parser.formats`
* @example
* parser.parse('Batman Begins (2005)', parser.formats.BRACES_FORMAT)
* @returns {object} An object with movie name & year
*/
parseMovieNameAndYear(movieFileName, format) {
let match = movieFileName.match(format);
if (match) {
return {
movieName: match[1].trim(),
year: match[2].trim()
}
}
{
throw new Error('Failed to parse movie name and year');
}
}
}
module.exports = Parser;