// ==UserScript==
// @name Hive - Magnet Catcher
// @namespace https://openuserjs.org/users/DefSoul/scripts
// @description When enabled will hook magnets when clicked and send to hive
// @version 2.0 > Fixed page detection (works on kat, eztv etc)
// @author DefSoul
// @include http*://*
// @include http*://touch.hive.im/account/*
// @include http*://api.hive.im/api/*
// @exclude http*://www.youtube.com/*
// @exclude http*://*.google.com/*
// @exclude http*://*.stripe.com/*
// @exclude http*://*.facebook.com/*
// @exclude http*://facebook.com/*
// @exclude about:blank
// @grant GM_getValue
// @grant GM_setValue
// @grant GM_deleteValue
// @grant GM_listValues
// @grant GM_log
// @grant GM_xmlhttpRequest
// @grant GM_addStyle
// @grant GM_getResourceText
// @require http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js
// @resource toastrCss http://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/css/toastr.min.css
// @require http://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/js/toastr.min.js
// ==/UserScript==
// CONFIG //
var folderName = "# Magnets #"; // CASE SENSITIVE
// END CONFIG //
var nameB = "Magnet Catcher: Test ";
GM_log(nameB + location.href);
var mag;
var auth;
auth = GM_getValue("auth");
var link;
GM_setValue("ready", "false");
//GM_deleteValue("auth");
toastr.options = {
"closeButton": false,
"debug": false,
"newestOnTop": false,
"progressBar": false,
"positionClass": "toast-bottom-right",
"preventDuplicates": true,
"onclick": null,
"showDuration": "300",
"hideDuration": "1000",
"timeOut": "5000",
"extendedTimeOut": "1000",
"showEasing": "swing",
"hideEasing": "linear",
"showMethod": "fadeIn",
"hideMethod": "fadeOut"
};
var newCSS = GM_getResourceText ("toastrCss");
GM_addStyle(newCSS);
function log(str, colour){console.log('%c dbg> ' + str, 'background: #D3D3D3; color: ' + colour);} // CUSTOM LOG
//=========UNSAFEWINDOW=========//
var bGreasemonkeyServiceDefined = false;
try {if (typeof Components.interfaces.gmIGreasemonkeyService === "object") {bGreasemonkeyServiceDefined = true;}}
catch (err) {}
if (typeof unsafeWindow === "undefined" || !bGreasemonkeyServiceDefined){
unsafeWindow = (function(){
var a = document.createElement('p');
a.setAttribute ('onclick', 'return window;');
return a.onclick ();
})();
}
//--------------------
function createFolder(uploadFolderName){
GM_xmlhttpRequest({ //CROSS DOMAIN POST REQUEST
"method": "get",
"url": "https://api.hive.im/api/hive/get/",
"headers": {
'Content-Type': 'application/x-www-form-urlencoded;',
'Authorization': auth,
'Client-Type': 'Browser',
'Client-Version': '0.1',
'Referer': 'https://touch.hive.im/myfiles/videos',
'Origin': 'https://touch.hive.im/'
},
"onload": function(data){
var r = data.responseText;
var json = JSON.parse(r);
for (var i = 0; i < json.data.length; i++){
var id;
if (json.data[i].title === "Videos"){ // FINDS INITIAL VIDEOS FOLDER ID
//log("we got a video ova here", "green");
parentId = json.data[i].parentId;
id = json.data[i].id;
GM_xmlhttpRequest({ //CROSS DOMAIN POST REQUEST
"method": "post",
"url": "https://api.hive.im/api/hive/get-children/",
"data": "&parentId=" + id + "&limit=1000",
"headers": {
'Content-Type': 'application/x-www-form-urlencoded;',
'Authorization': auth,
'Client-Type': 'Browser',
'Client-Version': '0.1',
'Referer': 'https://touch.hive.im/',
'Origin': 'https://touch.hive.im/'
},
"onload": function(data){
var r = data.responseText;
var json = JSON.parse(r);
var hasFolderIndex;
Object.keys(json.data).forEach(function(key) {
//log(json.data[key].title, "blue");
hasFolderIndex += json.data[key].title;
if (json.data[key].title === uploadFolderName){
uploadFolderId = json.data[key].id;
log("<" + uploadFolderName + "> Already exists. " + uploadFolderId, "green");
//return json.data[key].id;
}
});
if (hasFolderIndex.indexOf(uploadFolderName) == -1){ // SEARCHES VIDEOS FOLDER TO SEE IF uploadFolderName EXISTS
log("does not contain: " + uploadFolderName, "red");
GM_xmlhttpRequest({ //CROSS DOMAIN POST REQUEST
"method": "post",
"url": "https://api.hive.im/api/hive/create/",
"data": "filename=" + uploadFolderName + "&parent=" + id + "&locked=false",
"headers": {
'Content-Type': 'application/x-www-form-urlencoded;',
'Authorization': auth,
'Client-Type': 'Browser',
'Client-Version': '0.1',
'Referer': 'https://touch.hive.im/',
'Origin': 'https://touch.hive.im/'
},
"onload": function(data){
var r = data.responseText;
var json = JSON.parse(r);
uploadFolderId = json.data.id;
log("Create folder <" + uploadFolderName + "> " + json.data.id);
return json.data.id;
}
});
}
else{
//log("does contain: " + uploadFolderName, "green");
}
}
});
//log(parentId + "\n" + currentId);
}
//log(item, "blue");
}
//log(r, "blue");
}
});
}
function cdReq(href, nameT, folderId){
//log("cdReq start: " + href);
GM_xmlhttpRequest({ //CROSS DOMAIN POST REQUEST
"method": "post",
"url": "https://api.hive.im/api/transfer/add/",
"data": "remoteUrl=" + window.btoa(href) + "&parentId=" + folderId,
//"data": "remoteUrl=" + window.btoa(href),
"headers": {
'Content-Type': 'application/x-www-form-urlencoded;',
'Authorization': GM_getValue("auth"),
'Client-Type': 'Browser',
'Client-Version': '0.1',
'Referer': 'https://touch.hive.im/',
'Origin': 'https://touch.hive.im/'
},
"onload": function(data){
var r = data.responseText;
var json = JSON.parse(r);
if (json.status === "success"){
toastr.success("Status: " + json.data.status, nameT);
log("========= " + nameT + " success =========", "green");
log("Job ID: " + json.data.jobId, "blue");
log("Data Status: " + json.data.status, "blue");
log("Folder Id: " + folderId, "blue");
log("", "red");
}
else{
if (json.message === "quotaExceeded"){
toastr.warning(nameT, "Quota Exceeded");
}
else if (json.message === "securityViolation"){
toastr.error(nameT, "Security Violation");
}
log("========= " + nameT + " error =========", "green");
log("Message: " + json.message, "blue");
log("", "red");
}
//log("cdReq >" + data.responseText);
//transferItemsList(); // GO GET ITEMS IN CURRENT TRANSFER LIST
}
});
}
function torrentInfo(str){ // EXPERIMENTAL
try {
var result = "";
result = unescape(str);
log(result);
result = result.match(/dn=(.*?)tr=/g); // EXTRACTION INTO ARRAY
result[0] = result[0].replace("dn=", "");
result[0] = result[0].replace("&tr=", "");
result[0] = result[0].replace("&tr=", "");
result[0] = result[0].replace(/\+/g, " ");
//var myRegexp = /(.*?)\.S?(\d{1,2})E?(\d{2})\.(.*)/g;
//var match = myRegexp.exec(result[0]);
var name = result[0];
//var season = match[2];
//var episode = match[3];
//name = name.replace(/\./g, " ");
//var r = result[0].toString();
var r = result[0];
//log("" + r + "> " + folderId);
return r;
}
catch(err){
log("oh o! " + err, "red");
}
}
//
if (window.top === window.self) {
//=========MAIN WINDOW=========//
//log(document.documentElement.innerHTML);
var source = document.documentElement.innerHTML;
try{
bA = $("body h1").html();
if (typeof bA == "undefined"){
bA = "";
}
log(bA + nameB + " >body h1");
}
catch(err){bA = "";}
if (bA.indexOf("Index of") == -1 && document.location.href.indexOf("touch.hive.im") == -1){
createFolder(folderName);
//var keys = GM_listValues();
//for (var i=0, key=null; key=keys[i]; i++) {
// GM_deleteValue(key);
//}
if (!$("#iframeHive").length || typeof auth === "undefined"){
var iframe = document.createElement('iframe');
iframe.id = "iframeHive";
iframe.src = "https://touch.hive.im/account/?3";
iframe.style = "height: 0px; width: 0px; display: none; overflow:hidden";
document.body.appendChild(iframe);
$("#iframeHive").attr("style", "height: 0px; width: 0px; display: none; overflow:hidden");
//$("#iframeHive").attr("style", "height: 600px; width: 600px; display: block; overflow:hidden");
log("iframe created! " + nameB + ": " + location.href);
}
var onceB = 0;
setInterval(function(){
//log("AA: " + auth);
if (onceB === 0 && typeof auth !== "undefined"){
GM_setValue("ready", "true");
GM_setValue("auth", auth);
//$("#iframeHive").remove();
//log("TRUE: " + auth);
}
if (onceB === 0 && GM_getValue("ready") == "true"){
onceB = 1;
auth = GM_getValue("auth");
log("A: " + auth);
$("#iframeHive").remove();
//init();
}
}, 250);
$(document).on("click", "a", function(event){ // selector click event
if ($(this).attr('href').indexOf("magnet") !== -1){
mag = $(this).attr('href');
event.preventDefault();
log("WE GOT A MAGNET OVA HERE >" + mag);
$('body').prepend('<a href="#" class="hive">Hive</a>');
$(".hive").attr("style", 'display: block;width: 40px;height: 40px;text-indent: -9999px;position: fixed;z-index: 999999;right: 50%;top: 3px;background: url("http://imgh.us/download_4.svg") no-repeat center 50%;border-radius: 30px');
$(".hive").fadeOut("slow");
cdReq(mag, torrentInfo(mag), uploadFolderId);
}
});
}
}
else
{
//=========IFRAME WINDOW=========//
try{
auth = unsafeWindow.account.token;
}
catch(err){}
var once = 0;
setInterval(function(){ // EVENT FOR WHEN PAGE IS LOADED // RUNS ONCE
if (once === 0 && $("#username").text().indexOf("My Account") !== -1){
once = 1;
log("ready");
try{
auth = unsafeWindow.account.token;
}
catch(err){}
GM_setValue("auth", unsafeWindow.account.token);
GM_setValue("ready", "true");
}
else if (once === 1 && typeof auth == "undefined"){
GM_setValue("ready", "false");
try{
auth = unsafeWindow.account.token;
}
catch(err){}
}
}, 200);
}