ripunzel/src/app.js

50 lines
1.7 KiB
JavaScript
Raw Normal View History

2018-04-09 22:26:30 +00:00
'use strict';
const config = require('config');
const util = require('util');
const fs = require('fs-extra');
2018-04-09 22:26:30 +00:00
const snoowrap = require('snoowrap');
const omit = require('object.omit');
const exiftool = require('node-exiftool');
const exiftoolBin = require('dist-exiftool');
require('promise.prototype.finally').shim();
require('array.prototype.flatten').shim();
const reddit = new snoowrap(config.reddit.api);
2018-05-05 00:27:15 +00:00
const args = require('./cli.js');
const curatePosts = require('./curate/posts.js');
const interpolate = require('./interpolate.js');
const attachContentInfo = require('./fetch/info.js');
const fetchContent = require('./fetch/content.js');
2018-05-05 00:27:15 +00:00
const getPosts = require('./sources/getPosts.js')(reddit, args);
const getUserPosts = require('./sources/getUserPosts.js')(reddit, args);
2018-04-18 02:04:39 +00:00
if(!(args.users && args.users.length) && !(args.posts && args.posts.length)) {
return console.log('\x1b[31m%s\x1b[0m', 'Please supply at least one user with --user <user> or one post with --post <post-id>. See --help for more options.');
}
const ep = new exiftool.ExiftoolProcess(exiftoolBin);
Promise.resolve().then(async () => {
const initUsers = args.users ? args.users.reduce((acc, username) => ({...acc, [username]: {name: username, posts: []}}), {}) : {};
let userPosts = await getUserPosts(initUsers);
if(args.posts) {
userPosts = await getPosts(args.posts, userPosts);
}
const curatedUserPosts = curatePosts(userPosts, args);
const infoUserPosts = await attachContentInfo(curatedUserPosts);
await ep.open();
await Promise.all(Object.values(infoUserPosts).map(user => fetchContent(user, ep)));
await ep.close();
}).catch(error => {
return console.error(error);
});