All files observe.js

87.75% Statements 43/49
75% Branches 15/20
100% Functions 5/5
91.11% Lines 41/45

Press n or j to go to the next uncovered block, b, p or k for the previous block.

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 8337x 37x 37x 37x 4x 4x 4x 4x     4x 10x   4x 10x   4x   37x 4x 4x       4x 2x   4x 4x         4x 16x 16x 16x 16x   16x 3x             16x 16x   16x 4x   4x   16x                 4x   37x 3x 3x 3x 3x 3x             37x        
const fs = require('fs'),
    Malta = require('./malta'),
    elements = {},
    arrDiff = (a, b) => {
        const bAdded = [],
            bRemoved = [],
            astr = a.join(':::'),
            bstr = b.join(':::');
        let i, l;
 
        for (i = 0, l = a.length; i < l; i++) {
            if (bstr.indexOf(a[i]) < 0) bRemoved.push(a[i]);
        }
        for (i = 0, l = b.length; i < l; i++) {
            if (astr.indexOf(b[i]) < 0) bAdded.push(b[i]);
        }
        return { added: bAdded, removed: bRemoved };
    },
    observe  = (folder, cb, extension) => {
        const actual = {};
        let previous = false;
 
        // if (folder in elements) return false;
 
        if (!(folder in elements)) {
            elements[folder] = {};
        }
        Eif (!(extension in elements[folder])) {
            elements[folder][extension] = {};
        } else {
            return false;
        }
 
        elements[folder][extension] = setInterval(() => {
            try {
                fs.readdir(folder, function (err, files) {
                    Iif (err) throw err;
                    Iif (!files) return;
 
                    if (!previous) {
                        previous = {
                            files: files,
                            n: files.length,
                            time: new Date()
                        };
                    }
 
                    actual.files = files;
                    actual.n = files.length;
 
                    if (previous.files.length !== actual.files.length) {
                        actual.time = new Date();
 
                        cb(arrDiff(previous.files, actual.files), extension);
                    }
                    previous.files = actual.files;
                });
            } catch (err) {
                // eslint-disable-next-line no-console
                Malta.log_debug(err);
                process.exit();
            }
        }, 100);
 
        return true;
    },
    unobserve = (folder, extension) => {
        Eif (folder in elements) {
            Eif (extension in elements[folder]) {
                clearInterval(elements[folder][extension]);
                delete elements[folder][extension];
                return true;
            }
        }
        return false;
    };
 
 
module.exports = {
    observe,
    unobserve
};