summaryrefslogtreecommitdiffstats
path: root/assets/js/watch.js
diff options
context:
space:
mode:
Diffstat (limited to 'assets/js/watch.js')
-rw-r--r--assets/js/watch.js56
1 files changed, 56 insertions, 0 deletions
diff --git a/assets/js/watch.js b/assets/js/watch.js
index 99500686..81fa6288 100644
--- a/assets/js/watch.js
+++ b/assets/js/watch.js
@@ -50,3 +50,59 @@ function hide_youtube_replies(target) {
target.innerHTML = "Show replies";
target.setAttribute("onclick", "show_youtube_replies(this)");
}
+
+function download_video(target) {
+ var title = target.getAttribute("data-title");
+ var children = document.getElementById("download_widget").children;
+ var progress = document.getElementById("download-progress");
+ var url = "";
+
+ document.getElementById("progress-container").style.display = "";
+
+ for (i = 0; i < children.length; i++) {
+ if (children[i].selected) {
+ url = children[i].getAttribute("data-url");
+ }
+ }
+
+ url = "/videoplayback" + url.split("/videoplayback")[1];
+
+ var xhr = new XMLHttpRequest();
+ xhr.open("GET", url);
+ xhr.responseType = "arraybuffer";
+
+ xhr.onprogress = function(event) {
+ if (event.lengthComputable) {
+ progress.style.width = "" + (event.loaded / event.total)*100 + "%";
+ }
+ };
+
+ xhr.onload = function(event) {
+ if (event.currentTarget.status != 200) {
+ console.log("Downloading " + title + " failed.")
+ document.getElementById("progress-container").style.display = "none";
+ progress.style.width = "0%";
+
+ return;
+ }
+
+ var data = new Blob([xhr.response], {'type' : 'video/mp4'});
+ var videoFile = window.URL.createObjectURL(data);
+
+ var link = document.createElement('a');
+ link.href = videoFile;
+ link.setAttribute('download', title);
+ document.body.appendChild(link);
+
+ window.requestAnimationFrame(function() {
+ var event = new MouseEvent('click');
+ link.dispatchEvent(event);
+ document.body.removeChild(link);
+ });
+
+ document.getElementById("progress-container").style.display = "none";
+ progress.style.width = "0%";
+ };
+
+ xhr.send(null);
+} \ No newline at end of file