Adds an extra button to download, supports collections and new workshop layout
// ==UserScript== // @author Sycam Inc (origionally Alvaro) // @name Enhanced Steam Workshop Downloader // @description Adds an extra button to download, supports collections and new workshop layout // @include *steamcommunity.com/sharedfiles/filedetails/?id=* // @include *steamcommunity.com/workshop/filedetails/?id=* // @require http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js // @grant GM_xmlhttpRequest // @version 2.1 // @license MIT // @namespace https://greasyfork.org/users/6073 // ==/UserScript== var patt = new RegExp("[0-9]{2,15}"); var id = patt.exec(document.URL); var baseURL = "http://api.steampowered.com/ISteamRemoteStorage/GetPublishedFileDetails/v0001/"; var baseURLCtn = "http://api.steampowered.com/ISteamRemoteStorage/GetCollectionDetails/v0001/"; if (document.URL.indexOf("steamcommunity.com") != -1) { if (document.URL.indexOf("workshop") != -1) { addCollectionBtn(id); } else { addWorkshopBtn(id); } } function prepareDownload(url, id) { GM_xmlhttpRequest({ method: "POST", url: url, data: "itemcount=1&publishedfileids[0]=" + id + "&format=json", headers: { "Content-Type": "application/x-www-form-urlencoded" }, onload: function (response) { //console.log(response.responseText); //debugger; data = jQuery.parseJSON(response.responseText); var fileurl = data.response.publishedfiledetails[0].file_url; $("#SubscribeItemOptionAdd2").click(function (e) { e.preventDefault(); //stop the browser from following window.location.href = fileurl; }); }, onerror: function (reponse) { //alert('error'); console.log(reponse); } }); } function download(url, id) { GM_xmlhttpRequest({ method: "POST", url: url, data: "itemcount=1&publishedfileids[0]=" + id + "&format=json", headers: { "Content-Type": "application/x-www-form-urlencoded" }, onload: function (response) { //console.log(response.responseText); //debugger; data = jQuery.parseJSON(response.responseText); var fileurl = data.response.publishedfiledetails[0].file_url; console.log(fileurl); window.open(fileurl); }, onerror: function (reponse) { //alert('error'); console.log(reponse); } }); } function addWorkshopBtn(id) { var element = document.getElementById("AddToCollectionBtn"); var button = document.createElement('span'); button.setAttribute('class', 'general_btn share tooltip'); //button.setAttribute('href', baseURLCtn + id); button.innerHTML = '<span id="SubscribeItemOptionAdd2"><span>Скачать дополнение</span></span>'; // Append the element after the real subscribe button if (element.nextSibling) { element.parentNode.insertBefore(button, element.nextSibling); } else { element.parentNode.appendChild(button); } prepareDownload(baseURL, id); // Change the stupid text to the left of it document.querySelectorAll(".game_area_purchase_game")[0].getElementsByTagName('h1')[0].setAttribute('style', 'width: 300px;'); } function addCollectionBtn(id) { var element = document.getElementById("AddToCollectionBtn"); var button = document.createElement('span'); button.setAttribute('class', 'general_btn share tooltip'); //button.setAttribute('href', baseURLCtn + id); button.innerHTML = '<span id="SubscribeItemOptionAdd2"><span>Download</span></span>'; // Append the element after the real subscribe button if (element.nextSibling) { element.parentNode.insertBefore(button, element.nextSibling); } else { element.parentNode.appendChild(button); } prepareDownloadCtn(baseURLCtn, id); // Change the stupid text to the left of it document.querySelectorAll(".game_area_purchase_game")[0].getElementsByTagName('h1')[0].setAttribute('style', 'width: 300px;'); } function prepareDownloadCtn(url, id) { GM_xmlhttpRequest({ method: "POST", url: url, data: "collectioncount=1&publishedfileids[0]=" + id + "&format=json", headers: { "Content-Type": "application/x-www-form-urlencoded" }, onload: function (response) { //console.log(response); data = jQuery.parseJSON(response.responseText); $("#SubscribeItemOptionAdd2").click(function (e) { e.preventDefault(); //stop the browser from following $.each(data.response.collectiondetails[0].children, function(index, element) { download(baseURL,element.publishedfileid); }); }); }, onerror: function (reponse) { //alert('error'); console.log(reponse); } }); }