Greasy Fork is available in English.

Real-Debrid multi-upload torrents

Add multi-upload to torrents service of real-debrid, when you send file it will use the hoster and splitting above. After all uploads the page will refresh. Tested on chrome.

  1. // ==UserScript==
  2. // @name Real-Debrid multi-upload torrents
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.1
  5. // @description Add multi-upload to torrents service of real-debrid, when you send file it will use the hoster and splitting above. After all uploads the page will refresh. Tested on chrome.
  6. // @author gilbert1995
  7. // @match https://real-debrid.com/torrents
  8. // @grant none
  9. // @require https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js
  10. // @require https://cdnjs.cloudflare.com/ajax/libs/jquery-easing/1.3/jquery.easing.min.js
  11. // @require https://cdnjs.cloudflare.com/ajax/libs/blueimp-file-upload/9.12.5/js/vendor/jquery.ui.widget.min.js
  12. // @require https://cdnjs.cloudflare.com/ajax/libs/blueimp-file-upload/9.12.5/js/jquery.iframe-transport.min.js
  13. // @require https://cdnjs.cloudflare.com/ajax/libs/blueimp-file-upload/9.12.5/js/jquery.fileupload.min.js
  14. // ==/UserScript==
  15.  
  16. (function() {
  17. 'use strict';
  18. var link = '<style>#upload ul li u,a:hover{text-decoration:none}*{margin:0;padding:0}html{box-sizing:border-box;background-color:#ebebec;background-image:-webkit-radial-gradient(center,#ebebec,#b4b4b4);background-image:-moz-radial-gradient(center,#ebebec,#b4b4b4);background-image:radial-gradient(center,#ebebec,#b4b4b4);min-height:900px}*,:after,:before{box-sizing:inherit}body{font:15px/1.3 Arial,sans-serif;color:#4f4f4f}a,a:visited{outline:0;color:#389dc1}aside,footer,header,section{display:block}#upload{font-family:\'PT Sans Narrow\',sans-serif;background-color:#373a3d;background-image:-webkit-linear-gradient(top,#373a3d,#313437);background-image:-moz-linear-gradient(top,#373a3d,#313437);background-image:linear-gradient(top,#373a3d,#313437);padding:30px;border-radius:3px;box-shadow:0 0 10px rgba(0,0,0,.3)}#drop{background-color:#2E3134;padding:40px 50px;margin-bottom:30px;border:20px solid transparent;border-radius:3px;border-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2RpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0MUU5RTNGRDk4QjFFMjExODE0NkUyMUJBNERDNDk0NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo0OEZGM0JBREI3RTcxMUUyODFDRkE4MTU1MDRCRkVBRCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo0OEZGM0JBQ0I3RTcxMUUyODFDRkE4MTU1MDRCRkVBRCIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IFdpbmRvd3MiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo0MUU5RTNGRDk4QjFFMjExODE0NkUyMUJBNERDNDk0NyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo0MUU5RTNGRDk4QjFFMjExODE0NkUyMUJBNERDNDk0NyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PmuiwCwAAAF7SURBVHja7NpRSsMwAIDhZJbdoNLhdXwSvIBPg11CUBS9h7AnbyYr9hAxfRmIfRDdlqx8P2SwPqwjH01gS7y+uV2GEJ7yWOdxFf5RSikMfb9/H2MMbdeFYzWj+33ksc3jtckvL3ncB5VsfBAe8rhY5JeN+aimzQjSmodqahfmoK6aqYufu93BNsFDfdYc73e5Wv245gmpLCBABASIgAARECACAkRABASI/lRzyp+r9b2pufeEWLIE5Jz2kKm/Ee0rp8lfuJYsAQEiIEAEBIiACAgQAQEiIEAEBIiACAgQAQEiILPM2d6COdtryRKQc99DnO0tl7O9liwBASIgQAQEiIAICBABASIgQAQEiIAICBABASIgs8zZ3oI522vJEpBz30Oc7S2Xs72WLAEBIiBABASIgAgIEAEBIiBzrZm6OPWz8G9KKYWh7/fvY4yh7bqjffk53s8TUuGSNZiGahpGkDfzUE3bcQ95zmOZx10enTkp0rgxvefx+CXAAFXjX+IoV9pGAAAAAElFTkSuQmCC) 25 repeat;text-align:center;text-transform:uppercase;font-size:16px;font-weight:700;color:#7f858a}#drop a{background-color:#007a96;padding:12px 26px;color:#fff;font-size:14px;border-radius:2px;cursor:pointer;display:inline-block;margin-top:12px;line-height:1}#drop a:hover{background-color:#0986a3}#drop input,#upload ul li input{display:none}#upload ul{list-style:none;margin:0 -30px;border-top:1px solid #2b2e31;border-bottom:1px solid #3d4043}#upload ul li{background-color:#333639;background-image:-webkit-linear-gradient(top,#333639,#303335);background-image:-moz-linear-gradient(top,#333639,#303335);background-image:linear-gradient(top,#333639,#303335);border-top:1px solid #3d4043;border-bottom:1px solid #2b2e31;padding:15px;position:relative}#upload ul li p{overflow:hidden;white-space:nowrap;color:#EEE;font-size:16px;font-weight:700;margin-top:20px}#upload ul li b{position:absolute;top:20px;right:60px;font-size:42px;color:#fff}#upload ul li u{position:absolute;right:60px;top:63px}#upload ul li div{background:#0788a5;width:65%;height:4px;bottom:0;left:0;position:absolute}#upload ul li i{font-weight:400;font-style:normal;color:#7f7f7f;display:block}#upload ul li canvas{margin-top:15px;margin-left:32px}#upload ul li span{width:15px;height:12px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAaCAYAAABozQZiAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2RpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpFQUY1MzY0QUU3QjdFMjExODE0NkUyMUJBNERDNDk0NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpCOTc5MTBDQ0I3RUYxMUUyOUVBQkNFOURERDIzQkU4NSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpCOTc5MTBDQkI3RUYxMUUyOUVBQkNFOURERDIzQkU4NSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IFdpbmRvd3MiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpFQUY1MzY0QUU3QjdFMjExODE0NkUyMUJBNERDNDk0NyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpFQUY1MzY0QUU3QjdFMjExODE0NkUyMUJBNERDNDk0NyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PvX6SiYAAAGjSURBVHjanJRPRMRREMfbNtE19hQlolNdomsRaZUiIlHKdiml7CpFolU6pEOWTUTRJZKIakmHsqQ99UedOiT2lG6xRPSdzFtjGi+/ho99836/78z8Zt7bUN3VfElAKwcRkC/9h/AAPIKmsgDCMNgB3ezvB8m8BQZ4/QkmSVwJbsCcR7gOYrz+Av0gQ2WfgWaGvimphEsgLvwRcEQLypxVLy4KP678cbDnHMqc4GZMiQBU2huX62wWbMqSXLenWeDKW1alr4A13QjZ7YT1AmwDLFhd1KOi0naFf8lVmWYdklHuQTXo8g3eOiT07UOgFXy4zcPB2wpTjAdpcA8iVgbs0yTe8dsi90N3NdEUfifYfwBtPCZn9CzF6wJXlGt8Of3JXCVebAAXfOXIxoTQfVJYlk3n9NgIQGc9LfYpaxRcSzHdkD4jwKoStqujXOy2FUBnzPpGRQHODfErePprzjHVHGf1qom/xCTcVlXkPFMoiocNYQ/PM+MLQOIZJexlUUGsZYBOKaYRPAvhieq0DJCUt45uVZ5LrLXGIQJ0uP8uZ98CDADM9WkEBoK0xwAAAABJRU5ErkJggg==) no-repeat;top:34px;right:33px;position:absolute;cursor:pointer}#upload ul li.working span{height:16px;background-position:0 -12px}#upload ul li.error p{color:red}</style>';
  19. $('head').append(link);
  20. link = '<link rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css?family=PT+Sans+Narrow:400,700">';
  21. $('head').append(link);
  22.  
  23. // Your code here...
  24. $("#wrapper_global > div > div > form").after('<form id="upload" method="post" action="https://real-debrid.com/torrents" enctype="multipart/form-data"style="clear: both;top: 15px;position: relative;"><div id="drop">Drop Here<a>Browse</a><input type="file" name="file" multiple /></div><ul><!-- The file uploads will be shown here --></ul></form>');
  25.  
  26. var ul = $('#upload ul');
  27. $('#drop a').click(function(){
  28. // Simulate a click on the file input button
  29. // to show the file browser dialog
  30. $(this).parent().find('input').click();
  31. });
  32.  
  33. // Initialize the jQuery File Upload plugin
  34. $('#upload').fileupload({
  35.  
  36. // This element will accept file drag/drop uploading
  37. dropZone: $('#drop'),
  38.  
  39. formData: {splitting_size: $("#splitting_size").val(), hoster: $("#hoster").val()},
  40.  
  41. // This function is called when a file is added to the queue;
  42. // either via the browse button, or via drag/drop:
  43. add: function (e, data) {
  44.  
  45. var tpl = $('<li class="working"><p></p><span></span><b>0%</b><u></u><div></div></li>');
  46.  
  47. // Append the file name and file size
  48. tpl.find('p').text(data.files[0].name)
  49. .append('<i>' + formatFileSize(data.files[0].size) + '</i>');
  50.  
  51. // Add the HTML to the UL element
  52. data.context = tpl.appendTo(ul);
  53.  
  54. // Listen for clicks on the cancel icon
  55. tpl.find('span').click(function(){
  56.  
  57. if(tpl.hasClass('working')){
  58. jqXHR.abort();
  59. }
  60.  
  61. tpl.fadeOut(function(){
  62. tpl.remove();
  63. });
  64.  
  65. });
  66.  
  67. // Automatically upload the file once it is added to the queue
  68. var jqXHR = data.submit();
  69. },
  70.  
  71. progress: function(e, data){
  72.  
  73. // Calculate the completion percentage of the upload
  74. var progress = parseInt(data.loaded / data.total * 100, 10);
  75.  
  76. // Update the hidden input field and trigger a change
  77. // so that the jQuery knob plugin knows to update the dial
  78. data.context.find('b').html(progress + "%");
  79. data.context.find('div').css('width', progress + "%");
  80. data.context.find('u').html(formatFileSize(data.bitrate/8) + '/s');
  81.  
  82. if(progress == 100){
  83. data.context.removeClass('working');
  84. }
  85. },
  86.  
  87. fail:function(e, data){
  88. // Something has gone wrong!
  89. data.context.addClass('error');
  90. },
  91. stop: function (e) {
  92. console.log('Uploads finished');
  93. window.location.href = '';
  94. }
  95.  
  96. });
  97.  
  98.  
  99. // Prevent the default action when a file is dropped on the window
  100. $(document).on('drop dragover', function (e) {
  101. e.preventDefault();
  102. });
  103.  
  104. // Helper function that formats the file sizes
  105. function formatFileSize(bytes) {
  106. if (typeof bytes !== 'number') {
  107. return '';
  108. }
  109.  
  110. if (bytes >= 1000000000) {
  111. return (bytes / 1000000000).toFixed(2) + ' GB';
  112. }
  113.  
  114. if (bytes >= 1000000) {
  115. return (bytes / 1000000).toFixed(2) + ' MB';
  116. }
  117.  
  118. return (bytes / 1000).toFixed(2) + ' KB';
  119. }
  120. })();