Import/Export Steam Ignore List

Imports/Exports Steam Ignore List

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

    });
});