summaryrefslogtreecommitdiff
path: root/lib/initialize.js
blob: ae94f85f02cf9c9f2762a15e2183de3d737a2e09 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
/*
 * mongo-edu
 *
 * Copyright (c) 2014-2015 Przemyslaw Pluta
 * Licensed under the MIT license.
 * https://github.com/przemyslawpluta/mongo-edu/blob/master/LICENSE
 */

var mdbvideos = require('./login'),
    videoHandler = require('./videos'),
    prompts = require('./prompts'),
    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 = prompts.list, classes = list, check = prompts.check;

        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') ? '\n\nTry to add ' + '--cw'.green + ' to switch and search on courseware instead; make sure your mongodb user profile video preferences are set to youtube.\n' : ''));
                });

            });
        }

        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);
        }

    });

};