2018-04-09 22:26:30 +00:00
'use strict' ;
const config = require ( 'config' ) ;
2018-04-15 01:55:10 +00:00
const util = require ( 'util' ) ;
2018-04-22 21:46:14 +00:00
const fs = require ( 'fs-extra' ) ;
2018-04-09 22:26:30 +00:00
const snoowrap = require ( 'snoowrap' ) ;
2018-06-10 00:48:49 +00:00
const omit = require ( 'object.omit' ) ;
2018-06-12 23:51:45 +00:00
const exiftool = require ( 'node-exiftool' ) ;
const exiftoolBin = require ( 'dist-exiftool' ) ;
2018-05-04 22:51:58 +00:00
require ( 'promise.prototype.finally' ) . shim ( ) ;
require ( 'array.prototype.flatten' ) . shim ( ) ;
2018-04-22 21:46:14 +00:00
2018-04-22 23:50:07 +00:00
const reddit = new snoowrap ( config . reddit . api ) ;
2018-05-05 00:27:15 +00:00
const args = require ( './cli.js' ) ;
2018-04-22 23:50:07 +00:00
2018-04-29 00:02:34 +00:00
const curatePosts = require ( './curate/posts.js' ) ;
2018-04-22 23:50:07 +00:00
2018-04-22 21:46:14 +00:00
const interpolate = require ( './interpolate.js' ) ;
2018-04-29 00:02:34 +00:00
const attachContentInfo = require ( './fetch/info.js' ) ;
2018-04-22 23:50:07 +00:00
const fetchContent = require ( './fetch/content.js' ) ;
2018-04-22 21:46:14 +00:00
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
2018-04-29 00:02:34 +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.' ) ;
2018-04-22 21:46:14 +00:00
}
2018-06-12 23:51:45 +00:00
const ep = new exiftool . ExiftoolProcess ( exiftoolBin ) ;
2018-05-27 23:42:46 +00:00
Promise . resolve ( ) . then ( async ( ) => {
2018-06-10 00:48:49 +00:00
const initUsers = args . users ? args . users . reduce ( ( acc , username ) => ( { ... acc , [ username ] : { name : username , posts : [ ] } } ) , { } ) : { } ;
let userPosts = await getUserPosts ( initUsers ) ;
2018-05-04 22:51:58 +00:00
2018-04-29 00:02:34 +00:00
if ( args . posts ) {
2018-05-27 23:42:46 +00:00
userPosts = await getPosts ( args . posts , userPosts ) ;
2018-04-29 00:02:34 +00:00
}
2018-06-10 00:48:49 +00:00
const curatedUserPosts = curatePosts ( userPosts , args ) ;
const infoUserPosts = await attachContentInfo ( curatedUserPosts ) ;
2018-05-27 23:42:46 +00:00
2018-06-12 23:51:45 +00:00
await ep . open ( ) ;
await Promise . all ( Object . values ( infoUserPosts ) . map ( user => fetchContent ( user , ep ) ) ) ;
await ep . close ( ) ;
2018-04-29 00:02:34 +00:00
} ) . catch ( error => {
return console . error ( error ) ;
2018-04-22 21:46:14 +00:00
} ) ;