Proton db

try to take over the world!

Você precisará instalar uma extensão como Tampermonkey, Greasemonkey ou Violentmonkey para instalar este script.

Você precisará instalar uma extensão como Tampermonkey ou Violentmonkey para instalar este script.

Você precisará instalar uma extensão como Tampermonkey ou Violentmonkey para instalar este script.

Você precisará instalar uma extensão como Tampermonkey ou Userscripts para instalar este script.

Você precisará instalar uma extensão como o Tampermonkey para instalar este script.

Você precisará instalar um gerenciador de scripts de usuário para instalar este script.

(Eu já tenho um gerenciador de scripts de usuário, me deixe instalá-lo!)

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

(Eu já possuo um gerenciador de estilos de usuário, me deixar fazer a instalação!)

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