Proton db

try to take over the world!

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, Greasemonkey alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, % alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, % alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey alebo Userscripts.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie, ako napríklad Tampermonkey.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie správcu používateľských skriptov.

(Už mám správcu používateľských skriptov, nechajte ma ho nainštalovať!)

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

(Už mám správcu používateľských štýlov, nechajte ma ho nainštalovať!)

// ==UserScript==
// @name         Proton db
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       You
// @match        https://store.steampowered.com/app/*
// @grant         GM.xmlHttpRequest
// ==/UserScript==
// SteamPlay Whitelist
// Generated by get_whitelist.py on 2020-04-07

whitelist = [
    2280,
    2290,
    2300,
    2310,
    2360,
    2370,
    2390,
    2990,
    3300,
    3340,
    3980,
    4500,
    4580,
    4900,
    6060,
    6600,
    8200,
    8210,
    8220,
    8230,
    8240,
    8250,
    8260,
    8270,
    8280,
    8290,
    8300,
    9180,
    9450,
    15520,
    16300,
    22100,
    23310,
    24240,
    31220,
    31230,
    31240,
    31250,
    31260,
    31270,
    31280,
    32400,
    32460,
    32510,
    33120,
    38400,
    38410,
    40720,
    40950,
    48720,
    49470,
    57690,
    78000,
    94200,
    94400,
    94590,
    97330,
    104200,
    204360,
    207690,
    209690,
    210970,
    213670,
    215710,
    227000,
    234080,
    236450,
    237630,
    239350,
    246840,
    249050,
    268130,
    268910,
    269050,
    288160,
    314180,
    317280,
    322110,
    322170,
    342890,
    343780,
    344480,
    348250,
    348430,
    348440,
    350080,
    354970,
    355170,
    360380,
    360740,
    363440,
    364930,
    365260,
    366970,
    370060,
    374320,
    375310,
    375530,
    377860,
    379720,
    382900,
    388970,
    389730,
    397430,
    400630,
    412830,
    414700,
    435120,
    447150,
    448510,
    460950,
    462930,
    480640,
    490100,
    502720,
    505330,
    510540,
    511470,
    522470,
    524220,
    532110,
    534550,
    537520,
    540610,
    556180,
    557340,
    557600,
    575330,
    587000,
    588430,
    590380,
    618310,
    620980,
    650000,
    663210,
    674940,
    676820,
    691830,
    698780,
    705220,
    712180,
    717610,
    730820,
    744050,
    744190,
    744810,
    758190,
    764790,
    771070,
    782570,
    788770,
    820040,
    826600,
    887880,
    896420,
    897330,
    898940,
    905200,
    905260,
    909080,
    909110,
    910880,
    922400,
    935880,
    937170,
    952250,
    990400,
    1043180,
]

console.log(GM.xmlHttpRequest);


function calll (appid) {
    var url = "https://www.protondb.com/" + "api/v1/reports/summaries/" + appid + ".json";

    return new Promise((resolve, reject) => {
        GM.xmlHttpRequest({
            method: "GET",
            url: url,
            onload: function(response) {
                resolve(JSON.parse(response.responseText))
            },
            onerror: reject
        })
    }).catch(error => console.log(error))
    ;
}

class ProtonDB {
    static get HOMEPAGE() {return "https://www.protondb.com/";}
    static get API_SUMMARY() {return "api/v1/reports/summaries/";}

    static request_summary(appid, callback) {
        var request = new XMLHttpRequest();
        request.onreadystatechange = function () {
            callback(request);
        }
        request.open("GET", this.HOMEPAGE + this.API_SUMMARY + appid + ".json", true);
        request.send(null);
    }

    static request_rating(appid, callback)
    {
        calll(appid).then(callback);
    }
/*
    bestReportedTier: "platinum"
confidence: "strong"
score: 0.45
tier: "gold"
total: 109
trendingTier: "silver"
*/

    static get_rating_container(rating, whitelisted, key) {
        var container = document.createElement("div");

        container.className = "dev_row protondb_rating_row steam_row";
        container.title = "As seen by the community of ProtonDB.com";

        var link = document.createElement("a");
        link.className = "protondb_rating_link protondb_rating_" + rating[key];

        link.href = ProtonDB.HOMEPAGE + "app/" + Steam.get_app_id(window.location.href);
        link.textContent = rating[key];
        link.target = "_blank"

        if (whitelisted) {
            var star = document.createElement("span");
            star.className = "protondb_rating_whitelisted"
            star.title = "Whitelisted by Valve";
            star.textContent = " ★"

            link.appendChild(star);
        }

        container.appendChild(link);
        return container;
    }
}

class Steam {
    // Return a games appid from the url
    static get_app_id(url) {
        var appid = url.match(/\/(app)\/([0-9]{1,7})/);

        return parseInt(appid[2], 10);
    }

    // Insert the ProtonDB rating below DEVELOPER/PUBLISHER
    static insert_rating(rating, whitelisted, label, key) {
        var element = document.querySelector(".user_reviews");
        var subtitle = document.createElement("div");
        subtitle.className = "subtitle column'";
        subtitle.textContent = label;
        var container = ProtonDB.get_rating_container(rating, whitelisted, key);
        container.prepend(subtitle);

        if (element) {
            element.append(container);
        }
    }
}

// Main
var appid = Steam.get_app_id(window.location.href);
if (document.querySelector("span.platform_img.linux") === null) {
    ProtonDB.request_rating(appid, (rating) => {
        Steam.insert_rating(rating, null, 'ProtonDB score', 'score');
        Steam.insert_rating(rating, null, 'ProtonDB total', 'total');
        Steam.insert_rating(rating, null, 'ProtonDB max', 'bestReportedTier');
        Steam.insert_rating(rating, whitelist.includes(appid) ? true : false, 'ProtonDB Note', 'tier');
    });
} else {
    Steam.insert_rating("native");
}