'use strict'; const config = require('config'); const util = require('util'); const fs = require('fs-extra'); 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); 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'); const getPosts = require('./sources/getPosts.js')(reddit, args); const getUserPosts = require('./sources/getUserPosts.js')(reddit, args); 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 or one post with --post . 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); });