BS Check

Desktopbenachrichtigung bei neuer Folge einer favorisierten Serie!

// ==UserScript==
// @name         BS Check
// @namespace    http://tampermonkey.net/
// @version      2.1.1
// @description  Desktopbenachrichtigung bei neuer Folge einer favorisierten Serie!
// @author       Asu_nyan
// @match        https://bs.to/
// @match        https://burningseries.co/
// @grant        none
// @icon         https://bs.to/favicon.ico
// ==/UserScript==
// jshint esversion: 6

(function() {
    'use strict';
    check();
})();
function getFavLinks() {
    const names = Array.from(document.querySelectorAll('#other-series-nav > ul a')).map(el => el.href);
    return names.slice(0, names.length-2);
}
async function getNELinks() {
    const data = await fetch(window.location.origin).then(res => res.text());
    const div = document.createElement('div');
    div.innerHTML = data;
    let list = div.querySelectorAll('#newest_episodes > div > ul a');
    return Array.from(list).map(el => el.href);
}
function getShowRoot(url) {
    return url.split('/').slice(0, 5).join('/');
}
async function check() {
    let bsne = (window.localStorage.bsne) ? JSON.parse(window.localStorage.bsne) : [];
    (bsne.length > 40) ? bsne.splice(0, 20) : bsne;
    const fav_list = getFavLinks();
    const ne_list = await getNELinks();
    const filtered = ne_list.filter(e => fav_list.includes(getShowRoot(e)) && !bsne.includes(e));
    if(filtered.length) {
        filtered.forEach(async el => {
            const data = await fetch(el).then(res => res.text());
            const div = document.createElement('div');
            div.innerHTML = data;
            const cover = div.querySelector('img[alt="Cover"]').src;
            const title = div.querySelector('#sp_left > h2').textContent.split('Staffel')[0].trim()
            const options = { body: title, icon: cover };
            let n = new Notification('Neue Folge verfügbar!', options);
            n.href=el;
            n.onclick=function onclick(event){
                window.open(el);
                event.target.close();
            };
        });
        bsne = bsne.concat(filtered);
        window.localStorage.bsne = JSON.stringify(bsne);
    }
    setTimeout(check, 1000*60);
}