thorio/KGrabber

View on GitHub
src/js/start.js

Summary

Maintainability
A
0 mins
Test Coverage
const config = require("./config"),
    util = require("./util"),
    steps = require("./steps"),
    page = require("./ui/page"),
    statusManager = require("./statusManager"),
    { Episode } = require("kgrabber-types");

const preferences = config.preferenceManager.get(),
    status = statusManager.get(),
    defaultStep = "defaultBegin";

/**
 * Gets links for a range of episodes
 * @param {Number} start
 * @param {Number} end
 * @param {String} serverID
 */
module.exports = (start, end, serverID) => {
    let site = config.sites.current();
    let server = site.servers.get(serverID);
    statusManager.initialize({
        title: page.title(),
        serverID,
        linkType: server.linkType,
    });
    status.episodes = getEpisodes(start, end);
    status.func = server.getEffectiveStep(defaultStep, preferences.compatibility.enable_experimental_grabbers, !preferences.compatibility.force_default_grabber);

    statusManager.save();
    steps.execute(status.func, status, site);
    $("html, body").animate({ scrollTop: 0 }, "slow");
};

/**
 * Reads episodes from page
 * @param {Number} start
 * @param {Number} end
 * @returns {Episode[]}
 */
function getEpisodes(start, end) {
    let episodes = [];
    util.for(page.episodeList(), (i, obj) => {
        episodes.push(new Episode(i + 1, obj.href));
    }, {
        min: start,
        max: end,
    });

    return episodes;
}