Forked from majestrate/el-ebin-bitchute-downloader.user.js
Last active
January 14, 2021 12:39
-
-
Save cemerson/96bab48d317525fd5a84b1c66ba4d6e5 to your computer and use it in GitHub Desktop.
bitchute downloader
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==UserScript== | |
// @name el ebin bitchute downloader (cemerson update) | |
// @namespace http://tampermonkey.net/ | |
// @version 0.1 | |
// @description no homo | |
// @author jeff@i2p.rocks (cemerson 20190516 update) | |
// @match https://www.bitchute.com/video/* | |
// @grant none | |
// ==/UserScript== | |
(function() { | |
'use strict'; | |
// the following is not mine scroll for my code | |
/* FileSaver.js | |
* A saveAs() FileSaver implementation. | |
* 1.3.2 | |
* 2016-06-16 18:25:19 | |
* | |
* By Eli Grey, http://eligrey.com | |
* License: MIT | |
* See https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md | |
*/ | |
/*global self */ | |
/*jslint bitwise: true, indent: 4, laxbreak: true, laxcomma: true, smarttabs: true, plusplus: true */ | |
/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js */ | |
var saveAs = saveAs || (function(view) { | |
// IE <10 is explicitly unsupported | |
if (typeof view === "undefined" || typeof navigator !== "undefined" && /MSIE [1-9]\./.test(navigator.userAgent)) { | |
return; | |
} | |
var | |
doc = view.document | |
// only get URL when necessary in case Blob.js hasn't overridden it yet | |
, get_URL = function() { | |
return view.URL || view.webkitURL || view; | |
} | |
, save_link = doc.createElementNS("http://www.w3.org/1999/xhtml", "a") | |
, can_use_save_link = "download" in save_link | |
, click = function(node) { | |
var event = new MouseEvent("click"); | |
node.dispatchEvent(event); | |
} | |
, is_safari = /constructor/i.test(view.HTMLElement) || view.safari | |
, is_chrome_ios =/CriOS\/[\d]+/.test(navigator.userAgent) | |
, throw_outside = function(ex) { | |
(view.setImmediate || view.setTimeout)(function() { | |
throw ex; | |
}, 0); | |
} | |
, force_saveable_type = "application/octet-stream" | |
// the Blob API is fundamentally broken as there is no "downloadfinished" event to subscribe to | |
, arbitrary_revoke_timeout = 1000 * 40 // in ms | |
, revoke = function(file) { | |
var revoker = function() { | |
if (typeof file === "string") { // file is an object URL | |
get_URL().revokeObjectURL(file); | |
} else { // file is a File | |
file.remove(); | |
} | |
}; | |
setTimeout(revoker, arbitrary_revoke_timeout); | |
} | |
, dispatch = function(filesaver, event_types, event) { | |
event_types = [].concat(event_types); | |
var i = event_types.length; | |
while (i--) { | |
var listener = filesaver["on" + event_types[i]]; | |
if (typeof listener === "function") { | |
try { | |
listener.call(filesaver, event || filesaver); | |
} catch (ex) { | |
throw_outside(ex); | |
} | |
} | |
} | |
} | |
, auto_bom = function(blob) { | |
// prepend BOM for UTF-8 XML and text/* types (including HTML) | |
// note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF | |
if (/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(blob.type)) { | |
return new Blob([String.fromCharCode(0xFEFF), blob], {type: blob.type}); | |
} | |
return blob; | |
} | |
, FileSaver = function(blob, name, no_auto_bom) { | |
if (!no_auto_bom) { | |
blob = auto_bom(blob); | |
} | |
// First try a.download, then web filesystem, then object URLs | |
var | |
filesaver = this | |
, type = blob.type | |
, force = type === force_saveable_type | |
, object_url | |
, dispatch_all = function() { | |
dispatch(filesaver, "writestart progress write writeend".split(" ")); | |
} | |
// on any filesys errors revert to saving with object URLs | |
, fs_error = function() { | |
if ((is_chrome_ios || (force && is_safari)) && view.FileReader) { | |
// Safari doesn't allow downloading of blob urls | |
var reader = new FileReader(); | |
reader.onloadend = function() { | |
var url = is_chrome_ios ? reader.result : reader.result.replace(/^data:[^;]*;/, 'data:attachment/file;'); | |
var popup = view.open(url, '_blank'); | |
if(!popup) view.location.href = url; | |
url=undefined; // release reference before dispatching | |
filesaver.readyState = filesaver.DONE; | |
dispatch_all(); | |
}; | |
reader.readAsDataURL(blob); | |
filesaver.readyState = filesaver.INIT; | |
return; | |
} | |
// don't create more object URLs than needed | |
if (!object_url) { | |
object_url = get_URL().createObjectURL(blob); | |
} | |
if (force) { | |
view.location.href = object_url; | |
} else { | |
var opened = view.open(object_url, "_blank"); | |
if (!opened) { | |
// Apple does not allow window.open, see https://developer.apple.com/library/safari/documentation/Tools/Conceptual/SafariExtensionGuide/WorkingwithWindowsandTabs/WorkingwithWindowsandTabs.html | |
view.location.href = object_url; | |
} | |
} | |
filesaver.readyState = filesaver.DONE; | |
dispatch_all(); | |
revoke(object_url); | |
} | |
; | |
filesaver.readyState = filesaver.INIT; | |
if (can_use_save_link) { | |
object_url = get_URL().createObjectURL(blob); | |
setTimeout(function() { | |
save_link.href = object_url; | |
save_link.download = name; | |
click(save_link); | |
dispatch_all(); | |
revoke(object_url); | |
filesaver.readyState = filesaver.DONE; | |
}); | |
return; | |
} | |
fs_error(); | |
} | |
, FS_proto = FileSaver.prototype | |
, saveAs = function(blob, name, no_auto_bom) { | |
return new FileSaver(blob, name || blob.name || "download", no_auto_bom); | |
} | |
; | |
// IE 10+ (native saveAs) | |
if (typeof navigator !== "undefined" && navigator.msSaveOrOpenBlob) { | |
return function(blob, name, no_auto_bom) { | |
name = name || blob.name || "download"; | |
if (!no_auto_bom) { | |
blob = auto_bom(blob); | |
} | |
return navigator.msSaveOrOpenBlob(blob, name); | |
}; | |
} | |
FS_proto.abort = function(){}; | |
FS_proto.readyState = FS_proto.INIT = 0; | |
FS_proto.WRITING = 1; | |
FS_proto.DONE = 2; | |
FS_proto.error = | |
FS_proto.onwritestart = | |
FS_proto.onprogress = | |
FS_proto.onwrite = | |
FS_proto.onabort = | |
FS_proto.onerror = | |
FS_proto.onwriteend = | |
null; | |
return saveAs; | |
}( | |
typeof self !== "undefined" && self | |
|| typeof window !== "undefined" && window | |
|| this.content | |
)); | |
// ayyy dis my codes | |
var button = document.createElement("button"); | |
var make_ur_dreams_come_true = function() { | |
var client = new WebTorrent(); | |
// console.log(client); | |
console.log("adding torrent "+torrentId); | |
// Download the torrent | |
client.add(torrentId, function (torrent) { | |
var file = torrent.files[0]; | |
torrent.on('download', function (bytes) { | |
var p = client.progress; | |
button.innerHTML = "downloaded: "+ parseInt(p * 100) + "%"; | |
}); | |
// and save it | |
torrent.on('done', function() { | |
file.getBlob(function(err, blob) { | |
if(err) alert("download fail:" + err); | |
else { | |
saveAs(blob, file.name); | |
button.innerHTML = "SAVED"; | |
} | |
}); | |
}); | |
}); | |
}; | |
var es = document.getElementsByClassName("video-information"); // cemerson 20190516: "video-info-bar"); | |
var e = es[0]; | |
// CEMERSON 20190516 (START) ================================================== | |
var directMP4WasFound = false; | |
var videoSource = document.getElementsByTagName('source'); | |
// CEMERSON 20190516 (START) ================================================== | |
if(videoSource.length > 0){ | |
console.log('.. video source found ..'); | |
var videoSourceHasMP4 = (document.getElementsByTagName('source')[0].src.indexOf('.mp4') > -1); | |
console.log('... video source has mp4? (' + videoSourceHasMP4 + ')'); | |
if(videoSourceHasMP4){ | |
var mp4FilePath = document.getElementsByTagName('source')[0].src; | |
console.log('....... mp4 path (' + mp4FilePath + ')'); | |
var mp4FileName = document.title + '.mp4'; // mp4FilePath.split('/')[mp4FilePath.split('/').length-1]; | |
var a = document.createElement('a'); | |
var linkText = document.createTextNode("Download MP4"); | |
a.appendChild(linkText); | |
a.title = "Download this MP4"; | |
a.href = mp4FilePath; | |
a.onclick = function(){ | |
prompt('Right click this link and Save As ...',mp4FileName); // alert('Right click this link and Save As ...'); | |
return false; | |
}; | |
e.appendChild(a); | |
directMP4WasFound = true; | |
} | |
} | |
if(!directMP4WasFound){ | |
// CEMERSON 20190516 (END) ================================================== | |
button.innerHTML = "download MP4"; | |
button.onclick = function() { | |
button.innerHTML = "starting download...."; | |
make_ur_dreams_come_true(); | |
}; | |
e.appendChild(button); | |
} | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment