Skip to content

Instantly share code, notes, and snippets.

@tobbez
Created March 19, 2011 22:05
Show Gist options
  • Save tobbez/877852 to your computer and use it in GitHub Desktop.
Save tobbez/877852 to your computer and use it in GitHub Desktop.
Add multiple formats helper
// ==UserScript==
// @name Add multiple formats helper
// @namespace tobbez
// @description Helper for adding multiple formats to an album
// @include http*://*what.cd/torrents.php*
// @include http*://*what.cd/upload.php*
// ==/UserScript==
(function () {
/*
* Settings
*
* releaseDescription: This string will be added to the release
* description box on the upload page.
*
* formats: Format/bitrate pairs exactly as they appear on upload.php.
*/
var settings = { "releaseDescription": "",
"formats": [["MP3", "320"]
,["MP3", "V0 (VBR)"]
,["MP3", "V2 (VBR)"]
,["AAC", "320"]
,["Ogg Vorbis", "q8.x (VBR)"]]};
if (document.location.hostname.match(/what\.cd$/)
&& document.location.search != "") {
var populateFieldsFunc = function (reqData) {
document.getElementById("format").value = reqData["format"][0];
document.getElementById("bitrate").value = reqData["format"][1];
var torrentfrags = reqData.torrent.split(" / ");
document.getElementById("media").value = torrentfrags[torrentfrags.length-1];
document.getElementById("release_desc").value = settings.releaseDescription;
if (!reqData.release.match(/^Original Release/)) { /* Populate remaster info if relevant */
document.getElementById("remaster").click();
/* We can only match completly reliably with all the
* relase info present. If some if is missing, we
* cannot know which. */
var remastersJson = JSON.parse(document.getElementById("json_remasters").value);
var foundRemaster = false;
if (reqData.release.split(" / ").length == 3) {
var year, label, yearLabel, catNum, relTitle;
[yearLabel, catNum, relTitle] = reqData.release.split(" / ");
[year, label] = yearLabel.split(" - ");
for (var i = 0; i < remastersJson.length; ++i) {
if (remastersJson[i].RemasterCatalogueNumber == catNum
&& remastersJson[i].RemasterRecordLabel == label
&& remastersJson[i].RemasterTitle == relTitle
&& remastersJson[i].RemasterYear == year) {
document.getElementById("groupremasters").value = i;
var evt = document.createEvent("HTMLEvents");
evt.initEvent("change", true, false);
document.getElementById("groupremasters").dispatchEvent(evt);
foundRemaster = true;
break;
}
}
} else { /* We can only use year, which may not be unique */
var year = reqData.release.split(" - ")[0];
var hits = 0, remasterValue = null;
for (var i = 0; i < remastersJson.length; ++i) {
if (remastersJson[i].RemasterYear == year) {
++hits;
remasterValue = i;
}
}
if (hits == 1) { /* Year was unique */
document.getElementById("groupremasters").value = remasterValue;
var evt = document.createEvent("HTMLEvents");
evt.initEvent("change", true, false);
document.getElementById("groupremasters").dispatchEvent(evt);
foundRemaster = true;
}
}
if (!foundRemaster) {
var warningDiv = document.createElement("div");
warningDiv.className = "box";
warningDiv.style.margin = "0px auto";
warningDiv.style.width = "660px";
warningDiv.innerHTML =
"<div class=\"head\"><strong>Warning</strong></div>"
+ "<div style=\"padding: 0.5em;\"><p>It was not possible to set "
+ "<strong>Edition information</strong> properly for the "
+ "release with the following data:</p><pre style=\"padding-left: 20px;\">"
+ reqData.release
+ "</pre><p>Please do it manually.</p></div>";
var content = document.getElementById("content");
content.insertBefore(warningDiv, content.firstChild);
}
}
};
var launchPagesFunc = function (reqData) {
var sfrags = document.location.search.substring(1).split("&");
var albumId;
for (var i = 0; i < sfrags.length; ++i) {
var name, val;
[name, val] = sfrags[i].split("=");
if (name == "id") {
albumId = val;
break;
}
}
var uploadUrl = "upload.php?groupid=" + albumId + "#amdata=";
for (var i = 0; i < settings.formats.length; ++i) {
var freqdata = reqData;
freqdata["format"] = settings.formats[i];
window.open(uploadUrl + JSON.stringify(freqdata, "window" + String(i)));
}
};
if (document.location.pathname == "/torrents.php") {
var gtels = document.getElementsByClassName('group_torrent');
var currentEditionInfo = null;
for (var i = 0; i < gtels.length; ++i) {
if (!gtels[i].id.match(/^torrent/)) {
currentEditionInfo = gtels[i].firstElementChild.firstElementChild.innerHTML;
} else {
(function (cgtel, edinfo) {
var reqdata = {"release": edinfo,
"torrent": cgtel.getElementsByTagName('span')[0].nextElementSibling.innerHTML.substring(2)};
if (!reqdata["torrent"].match(/Lossless/)) return;
if (reqdata.release.match(/^Unknown Release/)) return;
var splitterElem = document.createTextNode("| ");
var linkElem = document.createElement('a');
linkElem.innerHTML = "AM";
linkElem.title = "Add multiple formats";
linkElem.href = '#';
linkElem.addEventListener("click", function () { launchPagesFunc(reqdata); } , false);
var linkSpan = cgtel.getElementsByTagName('span')[0];
linkSpan.insertBefore(splitterElem, linkSpan.lastChild);
linkSpan.insertBefore(linkElem, linkSpan.lastChild);
})(gtels[i], currentEditionInfo);
}
}
} else if (document.location.pathname == "/upload.php" && document.location.hash != "") {
var hashdata = document.location.hash.substring(1).split("&");
var reqdata = null;
for (var i = 0; i < hashdata.length; ++i) {
var name, val;
[name, val] = hashdata[i].split("=");
if (name == "amdata") {
reqdata = JSON.parse(val);
break;
}
}
if (reqdata) {
populateFieldsFunc(reqdata);
document.title = reqdata["format"].join("/") + " Upload :: What.CD";
}
}
}
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment