- // ==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);
- }
-
-
-
-
-
-
-
-
-
-
-
-