movie-list
Version:
A node program to show a list of your movies sorted by rating
131 lines (88 loc) • 3.62 kB
JavaScript
;
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