NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name Hive - Send to Hive Index Page // @namespace https://openuserjs.org/users/DefSoul/scripts // @description Allows sending multiple items from index pages to hive // @version 2.4 > Transfers now go into Videos/# Index # (Can be changed in source config) // @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/* // @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 // @require https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.3/jquery-ui.min.js // @resource jQueryUICSS http://code.jquery.com/ui/1.10.4/themes/ui-lightness/jquery-ui.css // ==/UserScript== /*jshint multistr: true */ // CONFIG // var detectIndexPage = true; // FALSE MEANS IT WILL RUN ON EVERY PAGE var folderName = "# Index #"; // CASE SENSITIVE // END CONFIG // // GLOBALS // var nameB = "Send to Hive Index Page: Test "; GM_log(nameB + location.href); var auth; var bA; var postMag = []; var a = []; var s; var origHref = []; var uploadFolderId; //auth = ""; //GM_deleteValue("auth"); auth = GM_getValue("auth"); var link; GM_setValue("ready", "false"); 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" }; //========= function log(str, colour){console.log('%c dbg> ' + str, 'background: #D3D3D3; color: ' + colour);} // CUSTOM LOG var newCSS = GM_getResourceText ("toastrCss"); GM_addStyle(newCSS); var newCSS2 = GM_getResourceText ("jQueryUICSS"); GM_addStyle(newCSS2); //=========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(nameT, "Status: " + json.data.status); 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 } }); }; $(document).on("click", "#bntDAll", function(){ // selector click event log("bntDALL clicked begin "); log("btnDALL: begin " + $(".ui-selected").attr("href")); postMag.length = 0; s = ""; a = $('.ui-selected').map(function(){ // puts all un-encoded videos ids into an array return document.location.href + $(this).attr("href"); // returns an int array of videos id values }); origHref = $('.ui-selected').map(function(){ // puts all un-encoded videos ids into an array return $(this).attr("href"); // returns an int array of videos id values }); for (var i = 0; i < a.length; i++){ s = a[i]; if (s.indexOf(".avi") !== -1 || s.indexOf(".mp4") !== -1 || s.indexOf(".flp") !== -1 || s.indexOf(".mp3") !== -1 || s.indexOf(".mpg") !== -1 || s.indexOf(".mov") !== -1 || s.indexOf(".mpeg") !== -1 || s.indexOf(".jpg") !== -1 || s.indexOf(".mkv") !== -1 || s.indexOf(".png") !== -1 || s.indexOf(".jpeg") !== -1 || s.indexOf(".wmv") !== -1){ log("bntDALL: " + a[i]); cdReq(a[i], origHref[i], uploadFolderId); //log(a[i]); } } log("bntDALL clicked end"); }); function addGlobalStyle(css) { var head, style; head = document.getElementsByTagName('head')[0]; if (!head) { return; } style = document.createElement('style'); style.type = 'text/css'; style.innerHTML = css; head.appendChild(style); } if (window.top === window.self) { //=========MAIN WINDOW=========// try{ createFolder(folderName); bA = $("body h1").html(); log(bA + nameB + " >body h1"); } catch(err){bA = "";} if (!$("#iframeHive").length){ 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: 400px; width: 600px; display: block; overflow:hidden"); log("iframe created! " + nameB + ": " + location.href); } if (detectIndexPage === true && typeof bA !== "undefined" && bA.indexOf("Index of") !== -1){ // START HERE //toastr.info("Connecting to Hive...."); $("body").append('<button type="button" id="bntDAll" title="Send Selected oo Hive" style="height: 2em; width: 12em;">Send Selected to Hive </button>'); $("pre").attr("id", "selectable"); $("pre").selectable({ filter: ":not(:contains('/'))", }); $("pre a:contains('/')").hover(function() { // HOVER OVER FOLDER $( "pre" ).selectable( "option", "distance", 50000 ); }); $("pre a:not(:contains('/'))").hover(function() { //$("pre").attr("id", "selectable"); $( "pre" ).selectable( "option", "distance", 0 ); }); addGlobalStyle("#feedback { font-size: 1.4em; }\ .ui-selecting { background: #FECA40; }\ .ui-selected{ background: #F39814; color: white; }\ #selectable { list-style-type: none; margin: 0; padding: 0; width: 60%; }\ #selectable li { margin: 3px; padding: 0.4em; font-size: 1.4em; height: 18px; }"); var onceB = 0; var onceD = 0; setInterval(function(){ //log("AA: " + auth); //log("AA: " + onceB); //log("AA: " + GM_getValue("auth")); if (onceD === 0 && typeof auth !== "undefined"){ //GM_setValue("ready", "true"); //GM_setValue("auth", auth); log("OLD: " + auth); onceD = 1; } if (onceB === 0 && GM_getValue("ready") == "true"){ onceB = 1; auth = GM_getValue("auth"); log("TRUE: " + GM_getValue("auth")); $("#iframeHive").remove(); log("#iframeHive removed"); //toastr.success("Hive Connected!"); } }, 250); $(document).on("click", "a", function(e){ // selector click event var linkA = $(this).attr("href"); link = document.location.href + $(this).attr("href"); log(linkA + nameB + " >link"); if (linkA.indexOf(".avi") !== -1 || linkA.indexOf(".mp4") !== -1 || linkA.indexOf(".flp") !== -1 || linkA.indexOf(".mp3") !== -1 || linkA.indexOf(".mpg") !== -1 || linkA.indexOf(".mov") !== -1 || linkA.indexOf(".mpeg") !== -1 || linkA.indexOf(".jpg") !== -1 || linkA.indexOf(".mkv") !== -1 || linkA.indexOf(".png") !== -1 || linkA.indexOf(".jpeg") !== -1 || linkA.indexOf(".wmv") !== -1) { e.preventDefault(); log(linkA + nameB + " >link"); log("test >" + link); $('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(link, linkA, uploadFolderId); } }); } else{ try{ $("#bntDAll").remove(); } catch(err){ log("Could not remove btnDall"); } } } else { //=========IFRAME WINDOW=========// //GM_deleteValue("auth"); try{ auth = unsafeWindow.account.token; } catch(err){} var once = 0; setInterval(function(){ // EVENT FOR WHEN PAGE IS LOADED // RUNS ONCE //log($("#username").text() + nameB) + " >username"; if (once === 0 && $("#username").text().indexOf("My Account") !== -1){ once = 1; log("Iframe ready auth: " + auth); log("Iframe ready unsafeWindow.account.token: " + unsafeWindow.account.token); //if (auth !== unsafeWindow.account.token){ log("auth !== unsafeWindow.account.token"); //GM_deleteValue("auth"); GM_setValue("auth", unsafeWindow.account.token); GM_setValue("ready", "true"); //} //else{ //auth = unsafeWindow.account.token; //GM_setValue("auth", unsafeWindow.account.token); //GM_setValue("ready", "true"); //log("Iframe Post: ready"); //} } else if (once === 1 && auth == "undefined"){ GM_setValue("ready", "false"); try{ //auth = unsafeWindow.account.token; } catch(err){ log("iframe: " + err); } } }, 200); }