Import/Export Steam Ignore List

Imports/Exports Steam Ignore List

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name        Import/Export Steam Ignore List
// @language    English
// @namespace   https://greasyfork.org/users/2205
// @description Imports/Exports Steam Ignore List
// @author      Rudokhvist
// @license     Apache-2.0
// @include     https://store.steampowered.com/account/notinterested/*
// @include     http://store.steampowered.com/account/notinterested/*
// @include     *://store.steampowered.com/account/notinterested
// @version     1.7
// @grant       none
// ==/UserScript==

let RateLimiterPost = function(url, postParams, successCallback, failCallback) {
    let Rate=100; //ms between requests;
    let lastCall=localStorage.getItem ('IESIIRateLimiter');
    if (lastCall!=null) {
        if ((parseInt(lastCall) + Rate) > Date.now()) {
            window.setTimeout(function(){
                RateLimiterPost(url, postParams, successCallback, failCallback);
            },parseInt(lastCall)+Rate-Date.now());
        } else { //already time
            $J.post(url, postParams, successCallback).fail(failCallback);
            localStorage.setItem('IESIIRateLimiter',Date.now());
        }
    }  else { //first call ever
        $J.post(url, postParams, successCallback).fail(failCallback);
        localStorage.setItem('IESIIRateLimiter',Date.now());
    }
};


let anchor = document.getElementsByClassName("ignored_apps")[0];
let workingDialog;
//Export
let ExportBtn=document.createElement("div");
ExportBtn.setAttribute("class","btn_darkblue_white_innerfade btn_medium");
ExportBtn.setAttribute("style","margin-right: 5px !important;");
ExportBtn.appendChild(document.createElement("span"));
ExportBtn.firstChild.appendChild(document.createTextNode("Export"));
let newExportBtn=anchor.parentElement.insertBefore(ExportBtn,anchor);
newExportBtn.addEventListener("click",function(){
    $J.get("/dynamicstore/userdata/", {t: new Date().getTime()}, function(data) {
        let strdata = "";
        console.log(data);
        if (Object.keys(data.rgIgnoredApps).length > 0) {
            for (let item in data.rgIgnoredApps) {
                strdata+=item.toString()+",<br />";
            }
            strdata=strdata.substr(0,strdata.length-7); //remove comma and br after last entry
        } else {
            strdata = "Ignore list is empty";
        }
        let exportDialog=ShowAlertDialog("Ignore List", '<div class="bb_code">'+strdata+'</div>', "OK");
    },"json").fail(function() {
        ShowAlertDialog("Export Error","There was an error retrieving ignore list","OK");
    });
});

//Import
let ImportBtn=document.createElement("div");
ImportBtn.setAttribute("class","btn_darkblue_white_innerfade btn_medium");
ImportBtn.setAttribute("style","margin-right: 5px !important;");
ImportBtn.appendChild(document.createElement("span"));
ImportBtn.firstChild.appendChild(document.createTextNode("Import"));
let newImportBtn=anchor.parentElement.insertBefore(ImportBtn,anchor);
let successfull=0;
let failed=0;
let totalitems;
newImportBtn.addEventListener("click",function(){
    let importDialog=ShowPromptWithTextAreaDialog( "Import Ignore List", "", "OK", "Cancel", 32765 ).done( function(newIgnoreListText){
        if (/^[0-9]+(,\s*[0-9]+)*$/.test(newIgnoreListText)) {
            let IgnoreListTextItems=newIgnoreListText.split(",");
            successfull=0;
            failed=0;
            totalitems=IgnoreListTextItems.length;
            workingDialog = ShowBlockingWaitDialog( 'Import Ignore List', 'Please wait, ' + totalitems +' entries left' );
            for (let i=0; i<totalitems;i++){
                let ignoreitem=parseInt(IgnoreListTextItems[i].trim());
                if (ignoreitem===0){
                    continue; //Dunno why this can even happen, but still
                }
                RateLimiterPost('/recommended/ignorerecommendation/', {
                    sessionid: g_sessionID,
                    appid: ignoreitem,
                    add: 1
                }, function() {
                    successfull++;
                    if ((successfull+failed)===totalitems) {
                        workingDialog.Dismiss();
                        ShowAlertDialog( "Import", "Import Finished.<br />Press \"OK\" to reload page.", "OK" ).done(function(){
                            window.location.reload();
                        });
                    } else {
                        workingDialog.Dismiss();
                        workingDialog = ShowBlockingWaitDialog( 'Import Ignore List', 'Please wait, ' + (totalitems-successfull-failed) +' entries left' );
                    }
                }, function() {
                    failed++;
                    if ((successfull+failed)===totalitems) {
                        workingDialog.Dismiss();
                        ShowAlertDialog( "Import", "Import Finished.<br />Press \"OK\" to reload page.", "OK" ).done(function(){
                            window.location.reload();
                        });
                    } else {
                        workingDialog.Dismiss();
                        workingDialog = ShowBlockingWaitDialog( 'Import Ignore List', 'Please wait, ' + (totalitems-successfull-failed) +' entries left' );
                    }
                });
            }
        } else {
            ShowAlertDialog( "Import Error", "Wrong list syntax!", "OK" );
        }
    });
});

//Clear
let ClearBtn=document.createElement("div");
ClearBtn.setAttribute("class","btn_darkblue_white_innerfade btn_medium");
ClearBtn.setAttribute("style","margin-right: 5px !important;");
ClearBtn.appendChild(document.createElement("span"));
ClearBtn.firstChild.appendChild(document.createTextNode("Clear"));
let newClearBtn=anchor.parentElement.insertBefore(ClearBtn,anchor);
newClearBtn.addEventListener("click",function(){
    ShowConfirmDialog( "Clear Ignore List", "Are you sure you want to clear ignore list?", "Yes", "No").done(function(){
        $J.get("/dynamicstore/userdata/", {t: new Date().getTime()}, function(data) {
            successfull=0;
            failed=0;
            console.log(data);
            let totalitems=Object.keys(data.rgIgnoredApps).length;
            if (totalitems > 0) {
                workingDialog = ShowBlockingWaitDialog( 'Clear Ignore List', 'Please wait, ' + totalitems +' entries left' );
                for (let item in data.rgIgnoredApps) {
                    RateLimiterPost('/recommended/ignorerecommendation/', {sessionid: g_sessionID,
                                                                           appid: item,
                                                                           remove: 1}, function () {
                        successfull++;
                        totalitems--;
                        if (totalitems===0) {
                            if (failed>0){
                                workingDialog.Dismiss();
                                ShowAlertDialog( "Clear", "Cleanup finished, unable to remove "+failed+" items.<br />Press \"OK\" to reload page.", "OK" ).done(function(){
                                    window.location.reload();
                                });
                            } else {
                                workingDialog.Dismiss();
                                ShowAlertDialog( "Clear", "Ignore list cleared successfuly<br />Press \"OK\" to reload page.", "OK" ).done(function(){
                                    window.location.reload();
                                });
                            }
                        } else {
                            workingDialog.Dismiss();
                            workingDialog = ShowBlockingWaitDialog( 'Clear Ignore List', 'Please wait, ' + totalitems +' entries left' );
                        }
                    }, function(){
                        failed++;
                        totalitems--;
                        if (totalitems===0) {
                            workingDialog.Dismiss();
                            ShowAlertDialog( "Clear", "Cleanup finished, unable to remove "+failed+" items.<br />Press \"OK\" to reload page.", "OK" ).done(function(){
                                window.location.reload();
                            });

                        } else {
                            workingDialog.Dismiss();
                            workingDialog = ShowBlockingWaitDialog( 'Clear Ignore List', 'Please wait, ' + totalitems +' entries left' );
                        }
                    });
                }
            } else {
                ShowAlertDialog("Nothing to clear","Ignore list is empty","OK");
            }
        },"json").fail(function() {
            ShowAlertDialog("Clean Error","There was an error retrieving ignore list","OK");
        });

    });
});