// ==UserScript==
// @name         Tanszéki portál összes letöltése
// @namespace    http://tampermonkey.net/
// @version      0.7
// @description  Tanszéki portálról minden feltöltött fájl letöltése
// @author       Nagy Ákos, Kis-Nagy Dániel
// @match        https://www.aut.bme.hu/Course/*/*/*/*
// @require      https://raw.githubusercontent.com/Stuk/jszip/master/dist/jszip.js
// @grant        none
// ==/UserScript==
/* jshint -W097 */
'use strict';

function getFiles() {
    var elements=$("li.zip > a, li.docx > a, li.pdf > a, li.txt > a");    
    var links=[];
    $(elements).each(function() {
        var sn = $(this).closest("tr").children().get(0).innerText;
        links.push( { studentName: sn, url: $(this).attr('href')});
    });        
    return links;
}


var files = getFiles();
var zip = new JSZip();
var count = 0;
var studentNames = $("tr.gridViewRow td:first-child, tr.gridViewAltRow td:first-child");

function downloadFile(url, onSuccess) {   
    var xhr = new XMLHttpRequest();            
    xhr.onreadystatechange = function () {         
        if (xhr.readyState == 4) {            
            if (onSuccess) onSuccess(xhr.response);
        }
    } 
    xhr.responseType = "blob";
    xhr.open('GET', url, true);  
    xhr.send();
}

function onDownloadComplete(blobData){      
    if (count < files.length) {        
        blobToBase64(blobData, function(binaryData){                
                var fileName = files[count].studentName + " - " + files[count].url.substring(files[count].url.lastIndexOf('/')+1);
                zip.file(fileName, binaryData, {base64: true});
                if (count < files.length -1){
                    count++;
                    downloadFile(files[count].url, onDownloadComplete);                    
                }
                else {                                             
                     var link = document.getElementById('download-link');
                    
                    if (zip.generateAsync) {
                        zip.generateAsync({type:"blob"}).then(function(content) {
                            var link=document.createElement('a');
                            link.download = $("div#body > h1").get(0).innerText+'.zip';
                            link.href = window.URL.createObjectURL(content);
                            link.click();
                        });
                    } else {
                        var blob = zip.generate({type:"blob"});
                        var link=document.createElement('a');
                        link.download = $("div#body > h1").get(0).innerText+'.zip';
                        link.href = window.URL.createObjectURL(blob);
                        link.click();
                    }
                }
            });
    }
}

function blobToBase64(blob, callback) {
    var reader = new FileReader();
    reader.onload = function() {
        var dataUrl = reader.result;
        var base64 = dataUrl.split(',')[1];
        callback(base64);
    };
    reader.readAsDataURL(blob);
}


var downloadBgImageData = "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuOWwzfk4AAAKMSURBVDhPdZNrSFNhGMdfQqTEjD5EgV2RCGptUeogEwY1Jci+hFHSFlOiCxXlhz4URImReSsRMSwhirCR2CQI0nTqnCjhIBIv8zJNZ5rzNmcOz87+Pe97RrouD/zh3H6/5znvew5bXe9tTpjru/DqwxdU1naivLoDJVVtKHjZggeVjbhbXicSevzvetfUC58/KLKwFIR3ScbcTxmzi0HM+GQB8/qvpKaxR8BegucJnCNwlsBpXxDTCysCXv+U8BuM7QBLvAR2zQAWn4ZduiJ4CJ7yhgt4CQniooDqFMgn4riRshZsjR4Rqniojh7H1ofjiEnNwuS8IvgzDOvWA29qgSs3gcyTgFELnKJh+EB2O9RGEzaokzAxJ2N8NgD3jIzR6QC+URSBRhMaiNcg4C8DFjchI5XhqdmBZMMNRKv1BMsEBzBKAg6PeKSQYPdehXWZAUcepBot/M8ZTPsYqiyfkXSOBBo9xgTMQSXDUwHcLqsngTZREfgqAOcR4C2N3sBQrGb4aHXimCETMZpkMbYAKS6Ch35IuFXaANZH7xq5MRIH9m8TixixPRY7Ew7STmzGnsMpUBUNgB1K/92Vg0OTEgYmA8h+YuXMSnnsDrqgBtOVguXnINqYjYTTlhBMIMGDHJ6Q4Pwu4WpxU7jg8etWzHdY0N9pw7PzGXQzFiPUVRk5QF1X4D7KxYLmcEEhffN1X4f5RbAtOrC0XDqOEucDEyQQ8DJ6xyX0uCVkPrKFC/JeNIW2SOnqEiMrYD915HAfwb3uZXRTjLmt4QL+x/GFctG4fKFWv68AKd3UuXtsGV2Us/fbwgU5FZ9wp0wJ36LsEiuuF1txubAZF/JbYMqzwUBdz+TYkX6vndKOX1JxlU12YFDIAAAAAElFTkSuQmCC')";

$(document).ready(function(){
    if (files && files.length>0)
    {
        document.createEvent ('MouseEvents').initEvent ('click', true, true);
        $("#btnSaveMultiple").after('<input type="button" id="downloadGomb" value="Összes letöltése" />');
        $('#downloadGomb').css("position", "relative");
        $('#downloadGomb').css("left", "5px");    
        $('#downloadGomb').css("margin-right", "5px")
        $('#downloadGomb').css("width", "115px");
        $('#downloadGomb').css("background-image", downloadBgImageData);      
        $('#downloadGomb').css("background-position", "4px 4px");    
        $('#downloadGomb').bind('click', function (){downloadFile(files[count].url,onDownloadComplete);});   
    }
});