UNPKG

movie-list

Version:

A node program to show a list of your movies sorted by rating

131 lines (88 loc) 3.62 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; exports.default = function ({ movieGlob = DEFAULT_GLOB, source = process.cwd(), concurrentRequests = DEFAULT_CONCURRENT_REQUESTS, apiKey = config.get('apiKey') } = {}) { debug('resolved options: %j', { movieGlob, source, concurrentRequests }); if (typeof concurrentRequests !== 'number') { throw new TypeError('concurrentRequests must be a number'); } if (typeof source !== 'string') { throw new TypeError('source must be a string'); } if (typeof movieGlob !== 'string' && !Array.isArray(movieGlob)) { throw new TypeError('movieGlob must be a string or a string array'); } if (!apiKey) { throw new _movieListError2.default('No api key provided'); } const omdb = new _omdbApiPt2.default({ apiKey }); const getMovieData = createMovieDataGetter(omdb); return (0, _globby2.default)(movieGlob, { cwd: source }).then(files => { debug('files found: %d', files.length); return (0, _pMap2.default)(files, getMovieData, { concurrency: concurrentRequests }); }).then(results => { debug('results: %j', results); return (0, _lodash2.default)(results).groupBy('state').mapValues((value, key) => key === 'succeeded' ? _lodash2.default.map(value, 'value') : value).value(); }); }; exports.saveKey = saveKey; var _path = require('path'); var _lodash = require('lodash'); var _lodash2 = _interopRequireDefault(_lodash); var _debug = require('debug'); var _debug2 = _interopRequireDefault(_debug); var _globby = require('globby'); var _globby2 = _interopRequireDefault(_globby); var _videoExtensions = require('video-extensions'); var _videoExtensions2 = _interopRequireDefault(_videoExtensions); var _movieTitle = require('movie-title'); var _movieTitle2 = _interopRequireDefault(_movieTitle); var _omdbApiPt = require('omdb-api-pt'); var _omdbApiPt2 = _interopRequireDefault(_omdbApiPt); var _pMap = require('p-map'); var _pMap2 = _interopRequireDefault(_pMap); var _configstore = require('configstore'); var _configstore2 = _interopRequireDefault(_configstore); var _package = require('../package.json'); var _movieListError = require('./movie-list-error'); var _movieListError2 = _interopRequireDefault(_movieListError); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const config = new _configstore2.default(_package.name); const debug = (0, _debug2.default)('movieList'); const createMovieDataGetter = omdb => file => { const movieInfo = { path: file, name: (0, _movieTitle2.default)((0, _path.basename)(file)) }; return omdb.byId({ title: movieInfo.name }).then(info => { if (!info || info.Response === 'False') { const err = new _movieListError2.default('Movie not found'); err.code = 'ENOMOVIE'; return Promise.reject(err); } return { state: 'succeeded', value: _extends({}, movieInfo, { info }) }; }).catch(err => ({ state: 'failed', value: movieInfo, reason: err })); }; const DEFAULT_GLOB = [`**/*.{${_videoExtensions2.default.join(',')}}`, '!**/*{sample,Sample,rarbg.com,RARBG.com}*.*']; const DEFAULT_CONCURRENT_REQUESTS = 15; function saveKey({ apiKey }) { config.set('apiKey', apiKey); } //# sourceMappingURL=index.js.map