diff options
-rw-r--r-- | lib/initialize.js | 103 | ||||
-rw-r--r-- | mongo-edu.js | 99 |
2 files changed, 109 insertions, 93 deletions
diff --git a/lib/initialize.js b/lib/initialize.js new file mode 100644 index 0000000..cbb2d99 --- /dev/null +++ b/lib/initialize.js @@ -0,0 +1,103 @@ +/* + * mongo-edu + * + * Copyright (c) 2014 Przemyslaw Pluta + * Licensed under the MIT license. + * https://github.com/przemyslawpluta/mongo-edu/blob/master/LICENSE + */ + +var mdbvideos = require('./login'), + videoHandler = require('./videos'), + colors = require('colors'), + inquirer = require('inquirer'); + +module.exports = function run(profile, argv) { + + 'use strict'; + + var lookFor = ((!argv.h)? 'Videos' : 'Handouts'); + + inquirer.prompt(profile, function prompt(answers) { + + var list = [{ type: 'list', name: 'url', message: '', choices: [] }], classes = list, + + check = [{ type: 'checkbox', message: '', name: 'videos', choices: [], + validate: function validate(answer) { + if ( answer.length < 1 ) { return 'You must choose at least one option.'; } + return true; + } + }]; + + mdbvideos.init(answers, argv, function get(err, data) { + if (err !== null) { throw err; } + + if (data.length) { + + classes[0].message = 'Found ' + data.length + ' Course'+ ((data.length > 1)? 's' : '') + '. Select:'; + classes[0].choices = data; + return currentList(); + + } + + }); + + function currentList() { + inquirer.prompt(classes, function prompt(answers) { + + mdbvideos.getList(answers, argv, function get(err, data, pass) { + if (err !== null) { throw err; } + + if (data.length) { + + if (pass) { return showDetails(err, data); } + + list[0].message = 'Found ' + data.length + ' List' + ((data.length > 1)? 's' : '') + '. Select:'; + list[0].choices = data; + + return currentVideos(); + + } else { + if (pass) { return console.log('i'.red + ' Looks like the course is not yet available or has already ended. ' + + lookFor + ' list is not available.\n\nCheck the start/end date for selected course.\n'); } + } + + return console.log('i'.red + ' Unable to locate any ' + lookFor.toLowerCase() + ' lists in the wiki. Are ' + + lookFor.toLowerCase() + ' list present in the wiki?' + + ((lookFor === 'Videos') ? ' Try to add ' + '--cw'.green + ' to switch and search on courseware instead.' : '')); + }); + + }); + } + + function currentVideos() { + + inquirer.prompt(list, function prompt(answers) { + + mdbvideos.listVideos(answers, argv, function get(err, data, pass) { + if (err !== null) { throw err; } + if (!pass) { return videoHandler.details(data, argv, showDetails); } + showDetails(err, data); + }); + + }); + } + + function showDetails(err, data) { + if (err !== null) { throw err; } + + if (data.length) { + check[0].message = 'Select From ' + (data.length - 2) + ' ' + lookFor + '. Download:'; + check[0].choices = data; + + return inquirer.prompt(check, function prompt(answers) { + videoHandler.download(answers, data, argv); + }); + + } + + console.log('i'.red + ' Could not locate any ' + lookFor.toLowerCase() + '.'); process.exit(0); + } + + }); + +}; diff --git a/mongo-edu.js b/mongo-edu.js index 6876ce9..ed6dfd1 100644 --- a/mongo-edu.js +++ b/mongo-edu.js @@ -8,10 +8,11 @@ var pkg = require('./package'), mdbvideos = require('./lib/login'), - videoHandler = require('./lib/videos'), - validate = require('./lib/validate'), configure = require('./lib/configure'), optArgs = require('./lib/options'), + validate = require('./lib/validate'), + videoHandler = require('./lib/videos'), + initialize = require('./lib/initialize'), yargs = optArgs.build(), url = require('url'), path = require('path'), @@ -24,11 +25,10 @@ exports.create = function start() { 'use strict'; - console.log('\n[ ' + pkg.name.toUpperCase() + ' ' + pkg.version + ' ]\n'); var argv = yargs.argv, proxyDetails = {}, - lookFor = ((!argv.h)? 'Videos' : 'Handouts'), isWin = /^win/.test(process.platform), slash = (isWin) ? '\\' : '/'; + isWin = /^win/.test(process.platform), slash = (isWin) ? '\\' : '/'; if (argv.help) { return yargs.showHelp(); } @@ -89,7 +89,7 @@ exports.create = function start() { configure(argv, function conf(err) { if (err !== null) { throw err; } - if (!argv.proxy || argv.h) { return run(profile); } + if (!argv.proxy || argv.h) { return initialize(profile, argv); } proxyDetails = url.parse(argv.proxy); @@ -107,97 +107,10 @@ exports.create = function start() { if (data) { console.log('i'.magenta + ' ' + data); } if (argv.test) { return videoHandler.checkProxyDownload(argv); } - run(profile); - }); - - }); - } - - function run(profile) { - - inquirer.prompt(profile, function prompt(answers) { - - var list = [{ type: 'list', name: 'url', message: '', choices: [] }], classes = list, - - check = [{ type: 'checkbox', message: '', name: 'videos', choices: [], - validate: function validate(answer) { - if ( answer.length < 1 ) { return 'You must choose at least one option.'; } - return true; - } - }]; - - mdbvideos.init(answers, argv, function get(err, data) { - if (err !== null) { throw err; } - - if (data.length) { - - classes[0].message = 'Found ' + data.length + ' Course'+ ((data.length > 1)? 's' : '') + '. Select:'; - classes[0].choices = data; - return currentList(); - - } - + initialize(profile, argv); }); - function currentList() { - inquirer.prompt(classes, function prompt(answers) { - - mdbvideos.getList(answers, argv, function get(err, data, pass) { - if (err !== null) { throw err; } - - if (data.length) { - - if (pass) { return showDetails(err, data); } - - list[0].message = 'Found ' + data.length + ' List' + ((data.length > 1)? 's' : '') + '. Select:'; - list[0].choices = data; - - return currentVideos(); - - } else { - if (pass) { return console.log('i'.red + ' Looks like the course is not yet available or has already ended. ' + - lookFor + ' list is not available.\n\nCheck the start/end date for selected course.\n'); } - } - - return console.log('i'.red + ' Unable to locate any ' + lookFor.toLowerCase() + ' lists in the wiki. Are ' + - lookFor.toLowerCase() + ' list present in the wiki?' + - ((lookFor === 'Videos') ? ' Try to add ' + '--cw'.green + ' to switch and search on courseware instead.' : '')); - }); - - }); - } - - function currentVideos() { - - inquirer.prompt(list, function prompt(answers) { - - mdbvideos.listVideos(answers, argv, function get(err, data, pass) { - if (err !== null) { throw err; } - if (!pass) { return videoHandler.details(data, argv, showDetails); } - showDetails(err, data); - }); - - }); - } - - function showDetails(err, data) { - if (err !== null) { throw err; } - - if (data.length) { - check[0].message = 'Select From ' + (data.length - 2) + ' ' + lookFor + '. Download:'; - check[0].choices = data; - - return inquirer.prompt(check, function prompt(answers) { - videoHandler.download(answers, data, argv); - }); - - } - - console.log('i'.red + ' Could not locate any ' + lookFor.toLowerCase() + '.'); process.exit(0); - } - }); - } }; |