aboutsummaryrefslogtreecommitdiffhomepage
path: root/ContentScript.js
blob: 1ddcde8f239e4e5c69b5e9bdee3771706ea5ba1b (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
if(id = youtube_parser(document.URL)){ // Direct Links
	SponsorsLookup(id);
}


chrome.runtime.onMessage.addListener( // Detect URL Changes
  function(request, sender, sendResponse) {
    if (request.message === 'ytvideoid') { // Message for background script
        SponsorsLookup(request.id);
    }
});

function SponsorsLookup(id) {
    v = document.querySelector('video') // Youtube video player
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.open('GET', 'https://officialnoob.github.io/YTSponsorSkip-Dataset/' + id, true); // Dataset lookup
    xmlhttp.onreadystatechange = function () {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            Sponsors = JSON.parse(xmlhttp.responseText);
            v.ontimeupdate = function () { // If exists add event to run on the videos "ontimeupdate"
                SponsorCheck(Sponsors);
            };
        }
    };
    xmlhttp.send(null);
}

function SponsorCheck(Sponsors) { // Video skipping
    Sponsors.forEach(function (el, index) { // Foreach Sponsor in video
        if ((Math.floor(v.currentTime)) == el[0]) { // Check time has sponsor
            v.currentTime = el[1]; // Set new time
        }
    });
}

function youtube_parser(url) { // Returns with video id else returns false
    var regExp = /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#\&\?]*).*/;
    var match = url.match(regExp);
    return (match && match[7].length == 11) ? match[7] : false;
}