// ==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 // @downloadURL https://update.greasyfork.icu/scripts/38862/ImportExport%20Steam%20Ignore%20List.user.js // @updateURL https://update.greasyfork.icu/scripts/38862/ImportExport%20Steam%20Ignore%20List.meta.js // ==/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()+",
"; } 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", '
'+strdata+'
', "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; iPress \"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.
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.
Press \"OK\" to reload page.", "OK" ).done(function(){ window.location.reload(); }); } else { workingDialog.Dismiss(); ShowAlertDialog( "Clear", "Ignore list cleared successfuly
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.
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"); }); }); });