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