diff options
| author | Omar Roth <omarroth@hotmail.com> | 2019-01-23 19:05:24 -0600 |
|---|---|---|
| committer | Omar Roth <omarroth@hotmail.com> | 2019-01-23 19:05:24 -0600 |
| commit | fb535ad6bba09359c176b0d0d7c9570cc873e41a (patch) | |
| tree | 4bb8538e84fe4eee121c1be085db07b29ad294e2 /assets/js | |
| parent | 15efac520eee51db6be278e8ebc72d515b70c6c8 (diff) | |
| download | invidious-fb535ad6bba09359c176b0d0d7c9570cc873e41a.tar.gz invidious-fb535ad6bba09359c176b0d0d7c9570cc873e41a.tar.bz2 invidious-fb535ad6bba09359c176b0d0d7c9570cc873e41a.zip | |
Add download widget
Diffstat (limited to 'assets/js')
| -rw-r--r-- | assets/js/watch.js | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/assets/js/watch.js b/assets/js/watch.js index 99500686..d8167114 100644 --- a/assets/js/watch.js +++ b/assets/js/watch.js @@ -50,3 +50,55 @@ function hide_youtube_replies(target) { target.innerHTML = "Show replies"; target.setAttribute("onclick", "show_youtube_replies(this)"); } + +function download_video(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.") + 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 |
