Last active
January 2, 2016 07:06
-
-
Save ip2k/3d81507c810314991bdf to your computer and use it in GitHub Desktop.
Add Transmission button to Kickass.to (requires a modified CORSProxy running on 127.0.0.1:1337)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==UserScript== | |
// @name Kickass Add Button | |
// @namespace http://your.homepage/ | |
// @version 0.1 | |
// @description enter something useful | |
// @author You | |
// @match https://kickass.tld/* | |
// @grant none | |
// ==/UserScript== | |
// remember to start corsproxy locally, and remember to modify lib/add-cors-headers.js for CORSProxy to accept 'X-Transmission-Session-Id' | |
window.session_id = ''; | |
$('.imagnet, .magnetlinkButton').each(function(idx, element) { | |
var ele = $(element); | |
var magnet_link = ele.attr('href'); | |
// ele.before('<input id="add" type="button" class="translink" value="add" onclick="add_to_transmission(\'' + magnet_link + '\');" />'); | |
ele.before('<img style="margin-bottom: -10px !important" onclick="add_to_transmission(\'' + magnet_link + '\');" src="data:image/png;base64,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" />'); | |
} ); | |
// $('.translink').css('background', 'url()'); | |
window.add_to_transmission = function(magnet_link) { | |
var url = 'http://127.0.0.1:1337/127.0.0.1:9091/transmission/rpc'; | |
payload = { | |
"method": "torrent-add", | |
"arguments": { | |
"paused": false, | |
"download-dir": "/torrent", | |
"filename": magnet_link | |
} | |
}; | |
$.ajax({ | |
type: "POST", | |
headers: {'X-Transmission-Session-Id': window.session_id }, | |
url: url, | |
data: JSON.stringify(payload), | |
success: function(xhr, textStatus, errorThrown) { | |
console.log(textStatus, xhr.arguments); | |
}, | |
dataType: 'json', | |
tryCount: 0, | |
retryLimit: 3, | |
statusCode: { | |
// 409 is Transmission's special way of saying 498 or 499 (token issue) | |
409: function(xhr, textStatus, errorThrown ) { | |
this.tryCount++; | |
if (this.tryCount <= this.retryLimit) { | |
// update session headers and retry | |
var begin = xhr.responseText.indexOf('X-Transmission-Session-Id:'); | |
var end = xhr.responseText.indexOf('</code>'); | |
// update the headers. We should have been able to use the server response's headers, but corsproxy seems to strip those :< | |
// this is some hax as it relies on scraping the error page (lol) | |
this.headers['X-Transmission-Session-Id'] = xhr.responseText.slice(begin, end).split('X-Transmission-Session-Id: ')[1]; | |
window.session_id = this.headers['X-Transmission-Session-Id']; // so it doesn't need to retry next time too | |
$.ajax(this); | |
return; | |
} | |
return; | |
} | |
} | |
}); | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Note also that you'll need to change
var url = 'http://127.0.0.1:1337/127.0.0.1:9091/transmission/rpc';
to reflect where Transmission is running in your environment.See http://i.imgur.com/NgucIQf.png & http://i.imgur.com/JRUHYV9.png for screenshots of this in action.