Proton db

try to take over the world!

Tendrás que instalar una extensión para tu navegador como Tampermonkey, Greasemonkey o Violentmonkey si quieres utilizar este script.

Necesitarás instalar una extensión como Tampermonkey o Violentmonkey para instalar este script.

Necesitarás instalar una extensión como Tampermonkey o Violentmonkey para instalar este script.

Necesitarás instalar una extensión como Tampermonkey o Userscripts para instalar este script.

Necesitará instalar una extensión como Tampermonkey para instalar este script.

Necesitarás instalar una extensión para administrar scripts de usuario si quieres instalar este script.

(Ya tengo un administrador de scripts de usuario, déjame instalarlo)

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

(Ya tengo un administrador de estilos de usuario, déjame instalarlo)

// ==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");
}