identify-media
Version:
Analyse file path and content to make search criteria for media APIs
77 lines • 2.35 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.isSameQuery = exports.mapResult = exports.mapAnalysedMedia = void 0;
const analyseFilePath_1 = require("../../lib/analyseFilePath");
const mapAnalysedMedia = (media) => {
if (typeof media === 'string')
return { s: media };
if ((0, analyseFilePath_1.isAnalysedMovie)(media) || (0, analyseFilePath_1.isAnalysedTVShow)(media))
return { s: media.name, type: media.type, y: media.year ? media.year.toString() : undefined };
throw new Error('media of unknown type: ' + JSON.stringify(media));
};
exports.mapAnalysedMedia = mapAnalysedMedia;
const makeImages = (entry) => {
if (entry.Poster) {
return { 'omdb-poster': entry.Poster };
}
return {};
};
const months = {
'Jan': '01',
'Feb': '02',
'Mar': '03',
'Apr': '04',
'May': '05',
'Jun': '06',
'Jul': '07',
'Aug': '08',
'Sep': '09',
'Oct': '10',
'Nov': '11',
'Dec': '12',
};
const dateRegex = /([0-9]{2}) ([a-z]+) ([0-9]{4})/i;
const mapDate = (date) => {
const result = dateRegex.exec(date);
if (result)
return [result[3], months[result[2]], result[1]].join('-');
return undefined;
};
const mapResult = (result) => {
if (result.Error)
throw new Error(result.Error);
if (!result.Search)
throw new Error('No search result');
return result.Search.map((entry) => {
if (entry.Type === 'series') {
return {
type: 'tv',
name: entry.Title,
imdbId: entry.imdbID,
firstAirDate: mapDate(entry.Released),
mediaInfo: {
plot: entry.Plot,
images: makeImages(entry)
}
};
}
else {
return {
type: 'movie',
title: entry.Title,
imdbId: entry.imdbID,
release: mapDate(entry.Released),
mediaInfo: {
plot: entry.Plot,
images: makeImages(entry)
}
};
}
});
};
exports.mapResult = mapResult;
const isSameQuery = (a, b) => a.y === b.y
&& a.s === b.s
&& a.type === b.type;
exports.isSameQuery = isSameQuery;
//# sourceMappingURL=mapper.js.map