Steam Filter Games by Geforce NOW Availability/Compatibility

Adds a button to Steam Community games list pages (https://steamcommunity.com/id/<user_id>/games/?tab=all) that will filter out all games that are not supported by Geforce NOW, leaving only supported games visible.

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         Steam Filter Games by Geforce NOW Availability/Compatibility
// @namespace    driver8.net
// @version      0.1.3
// @description  Adds a button to Steam Community games list pages (https://steamcommunity.com/id/<user_id>/games/?tab=all) that will filter out all games that are not supported by Geforce NOW, leaving only supported games visible.
// @author       driver8
// @match        *://*.steamcommunity.com/id/*/games*
// @match        *://*.steamcommunity.com/my/games*
// @match        *://*.steamcommunity.com/profiles/*/games*
// @grant        GM.xmlHttpRequest
// @connect      static.nvidiagrid.net
// ==/UserScript==

(function() {
    'use strict';

    console.log('hi gfn filter');

    let supportedGames = [],
        notSupportedGames = [],
        insAt = document.querySelector('#mainContents > .sectionTabs'),
        newDiv = document.createElement('div');
    var gfnSteamIds = {};

    newDiv.innerHTML = `<a class="sectionTab "><span>Geforce NOW Compatible</span></a>`;
    let newA = newDiv.firstElementChild;
    newA.onclick = () => {
        checkJSON();
        newA.innerHTML = '<span>Filtering...</span>';
        newA.onclick = null;
    };
    insAt.appendChild(newA);

    function filterGames() {
        if (!gfnSteamIds) return;
        let allGameRows = Array.from(document.querySelectorAll('.gameListRow'));
        for (let row of allGameRows) {
            let m = row.id.match(/game_(\d+)/); // steam ID
            let isSupported = m && gfnSteamIds.hasOwnProperty(m[1]);
            (isSupported ? supportedGames : notSupportedGames).push(row);
        }
        for (let div of notSupportedGames) {
            div.style.display = 'none';
        }
        window.dispatchEvent(new Event('resize')); // hacky fix for images not lazy-loading
        console.log('Supported games', supportedGames);
        newA.innerHTML = `<span>${supportedGames.length} games supported by Geforce NOW</span>`;
    }

    function checkJSON() {
        GM.xmlHttpRequest({
            method: "GET",
            url: "https://static.nvidiagrid.net/supported-public-game-list/gfnpc.json",
            reponseType: "JSON",
            onload: function(response) {
                let gfnJSON = JSON.parse(response.responseText);
                console.log('json', gfnJSON);
                for (let game of gfnJSON) {
                    let m = game.steamUrl.match(/\/(\d+)$/i);
                    if (m) {
                        gfnSteamIds[m[1]] = game;
                    }
                }
                filterGames();
            }
        });
    }
})();