NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==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.1 // @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); }