WirnCael / HachedeHistorial

// ==UserScript==
// @name					HachedeHistorial
// @namespace		hachedeHistorial
// @description		Permite ordenar el historial
// @icon				https://hachede.me/favicon.ico?lv=2.2
// @include				https://hachede.me/*
// @include				http://hachede.me/*
// @version				2
// @author				WirnCael
// @grant					none
// @require				http://code.jquery.com/jquery-1.11.2.min.js
// @priority				1
// @run-at				document-end
// @downloadURL https://openuserjs.org/install/WirnCael/HachedeHistorial.user.js
// ==/UserScript==

var j = jQuery.noConflict(true);

// Variables
var tipoHistorial = {
         Activos: 0,
         Inactivos: 1
}
var tipoHistorialActual = 0;
var ordenHistorialActualTipo = 0;  // 0 down, 1 up
var ordenHistorialActualNombre ="Actualización";
var arrayTorrentsActivos = [];
var arrayTorrentsInactivos = [];
var arrayTorrentsActivosOriginal = [];
var arrayTorrentsInactivosOriginal = [];

//Nuevas
var screenWidth;
var screenHeight;

// Función principal
j( document ).ready(function( $ ) {
    // Para el panel de usuario de HOME (debajo del avatar)
	j('#logged').parent().delegate('span', 'click', function(){
        arrayTorrentsActivos = []; arrayTorrentsInactivos = [];
        ordenHistorialActualNombre ="Actualización";
        fDetectaHistorial();
    });
    
    // Para la barra de navegacion
    j('#history_link').click(function(){        
        arrayTorrentsActivos = []; arrayTorrentsInactivos = [];
        ordenHistorialActualNombre ="Actualización";
        fDetectaHistorial();
    });
    
    screenWidth = j( window ).width();
    screenHeight = j( window ).height();
    
    // NUEVO
    console.log("Window: " + screenWidth);
    console.log("Screen: " + heightScreen);
});

// Funciones auxiliares

//Espera a que aparezca la ventana del Historial
function fDetectaHistorial(){       
    if (j('#overlay').find('.overlay_header:visible').length > 0) {
        fDetectaPestActiva();
    }
    else{
        setTimeout(function() {
            fDetectaHistorial();
        }, 10);
    }
}

//Detecta la pestaña activa en el Historial
function fDetectaPestActiva(){ 
    j('a[href="#active_torrents').click(function(){        
        tipoHistorialActual = tipoHistorial.Activos;
        fOrdenarTorrents( "Inicio" );
    });
    j('a[href="#inactive_torrents').click(function(){ 
        tipoHistorialActual = tipoHistorial.Inactivos;
        fOrdenarTorrents( "Inicio" );
    });
    
    if (j('a[href="#active_torrents').attr('class') == "current") { 
      tipoHistorialActual = tipoHistorial.Activos;
      fGuardaHistorial();
    }   

   // HACE FALTA ESTA? Empieza siempre en activos? Se deja hasta prueba.
    if (j('a[href="#inactive_torrents').attr('class') == "current") { 
         tipoHistorialActual = tipoHistorial.Inactivos;
         fGuardaHistorial();
    }
    j('.subHeader:contains("' + ordenHistorialActualNombre + '")').append(" (↓ Desc.)");
    j('.subHeader:contains("' + ordenHistorialActualNombre + '")').css({"background":"#F5A04C"});
}

//Guarda el Historial
function fGuardaHistorial(){    
   j('#overlay').find('tr.trRow:visible').each(function(){
       if(tipoHistorialActual == tipoHistorial.Activos) arrayTorrentsActivos.push(this);
       else arrayTorrentsInactivos.push(this);
   });
    
   j('#overlay').find('tr.trRow:hidden').each(function(){
       if(tipoHistorialActual == tipoHistorial.Activos) arrayTorrentsInactivos.push(this);
       else arrayTorrentsActivos.push(this);
   });
    
    arrayTorrentsActivosOriginal = arrayTorrentsActivos.slice();
    arrayTorrentsInactivosOriginal = arrayTorrentsInactivos.slice();   
    fHistorialClickable();
}

// Habilita la opcion de ordenar el Historial
function fHistorialClickable(){
    j('th.subHeader').css( 'cursor', 'pointer' );
    j('th.subHeader').click(function(){
        if(j(this).text() == "Activos") j(this).css( 'cursor', 'default' );
        else fOrdenarTorrents( j(this).text() );
    }); 
    
    //NUEVO
     j('div.overlay_text').attr("style", "height: " + (screenHeight - 200) + "px; with: " + (screenWidth - 200) +  "px;");
}

// Ordena los torrents del Historial actualmente visibles en funcion del tipo de orden elegido.
function fOrdenarTorrents( tipoOrden ){
    var array;
    if (tipoHistorialActual == tipoHistorial.Activos)  array = arrayTorrentsActivos;
    else array = arrayTorrentsInactivos;
    
    // Para quitar las flechas anteriores
    var separators = [" \\(\\↑ Asc\\.\\)"," \\(\\↓ Desc\\.\\)"];
    tipoOrden = tipoOrden.split(new RegExp(separators.join('|'), 'g'))[0];       
    j('.subHeader:contains("' + ordenHistorialActualNombre + '")').html(j('.subHeader:contains("' + ordenHistorialActualNombre + '")').text().split(new RegExp(separators.join('|'), 'g'))[0]);
    j('.subHeader:contains("' + ordenHistorialActualNombre + '")').css({"background":"#E47600"});
    
    if(tipoOrden.indexOf("Nombre del Torrent") >= 0){
        if(ordenHistorialActualNombre == "Nombre del Torrent"){
            fOrdenInversoHistorial(array);
        }
        else{
            j('.subHeader:contains("' + tipoOrden + '")').append(" (↓ Desc.)");
            ordenHistorialActualTipo = 0;
            array.sort(function(a, b){
                return j(a).find('td.secondRow, td.firstRow').eq(0).text().toUpperCase().localeCompare(j(b).find('td.secondRow, td.firstRow').eq(0).text().toUpperCase());
            }); 
        }
    }
    else if(tipoOrden.indexOf("Tamaño") >= 0){
        if(ordenHistorialActualNombre == "Tamaño"){
            fOrdenInversoHistorial(array);
        }
        else{
            j('.subHeader:contains("' + tipoOrden + '")').append(" (↓ Desc.)");
            ordenHistorialActualTipo = 0;
            array.sort(function(a, b){
                a = j( a ).find('td.secondRow, td.firstRow').eq(1).text();
                b = j( b ).find('td.secondRow, td.firstRow').eq(1).text();
                a = fCalculaTB(a);
                b = fCalculaTB(b); 
                if ((b - a) === 0) return j(a).find('td.secondRow, td.firstRow').eq(0).text().toUpperCase().localeCompare(j(b).find('td.secondRow, td.firstRow').eq(0).text().toUpperCase());
                else return b - a;
            });
        }
    }
    else if(tipoOrden.indexOf("Seeders") >= 0){        
       if(ordenHistorialActualNombre == "Seeders"){
            fOrdenInversoHistorial(array);
        }
        else{
            j('.subHeader:contains("' + tipoOrden + '")').append(" (↓ Desc.)");
            ordenHistorialActualTipo = 0;
            array.sort(function(a, b){
                var aux = j( b ).find('td.secondRow, td.firstRow').eq(2).text() - j( a ).find('td.secondRow, td.firstRow').eq(2).text();
                if(aux === 0) return j(a).find('td.secondRow, td.firstRow').eq(0).text().toUpperCase().localeCompare(j(b).find('td.secondRow, td.firstRow').eq(0).text().toUpperCase());
                else return aux;
            });
        }
    }
    else if(tipoOrden.indexOf("Leechers") >= 0){
        if(ordenHistorialActualNombre == "Leechers"){
            fOrdenInversoHistorial(array);
        }
        else{
            j('.subHeader:contains("' + tipoOrden + '")').append(" (↓ Desc.)");
            ordenHistorialActualTipo = 0;
            array.sort(function(a, b){
                var aux = j( b ).find('td.secondRow, td.firstRow').eq(3).text() - j( a ).find('td.secondRow, td.firstRow').eq(3).text();
                if(aux === 0) return j(a).find('td.secondRow, td.firstRow').eq(0).text().toUpperCase().localeCompare(j(b).find('td.secondRow, td.firstRow').eq(0).text().toUpperCase());
                else return aux;
            });   
        }
    }
    else if(tipoOrden.indexOf("Descargado") >= 0){
        if(ordenHistorialActualNombre == "Descargado"){
            fOrdenInversoHistorial(array);
        }
        else{
            j('.subHeader:contains("' + tipoOrden + '")').append(" (↓ Desc.)");
            ordenHistorialActualTipo = 0;
            array.sort(function(a, b){
                a = j( a ).find('td.secondRow, td.firstRow').eq(4).html().split("<br>")[0];
                b = j( b ).find('td.secondRow, td.firstRow').eq(4).html().split("<br>")[0];

                a = fCalculaTB(a);
                b = fCalculaTB(b); 

                if ((b - a) == 0) return j(a).find('td.secondRow, td.firstRow').eq(0).text().toUpperCase().localeCompare(j(b).find('td.secondRow, td.firstRow').eq(0).text().toUpperCase());
                else return b - a;
            });
        }
    }
    else if(tipoOrden.indexOf("Subido") >= 0){
        if(ordenHistorialActualNombre == "Subido"){
            fOrdenInversoHistorial(array);
        }
        else{
            j('.subHeader:contains("' + tipoOrden + '")').append(" (↓ Desc.)");
            ordenHistorialActualTipo = 0;
            array.sort(function(a, b){
                a = j( a ).find('td.secondRow, td.firstRow').eq(5).html().split("<br>")[0];
                b = j( b ).find('td.secondRow, td.firstRow').eq(5).html().split("<br>")[0];

                a = fCalculaTB(a);
                b = fCalculaTB(b); 

                if ((b - a) == 0) return j(a).find('td.secondRow, td.firstRow').eq(0).text().toUpperCase().localeCompare(j(b).find('td.secondRow, td.firstRow').eq(0).text().toUpperCase());
                else return b - a;
            });
        }
    }
    else if(tipoOrden.indexOf("Ratio") >= 0){
        if(ordenHistorialActualNombre == "Ratio"){
            fOrdenInversoHistorial(array);
        }
        else{
            j('.subHeader:contains("' + tipoOrden + '")').append(" (↓ Desc.)");
            ordenHistorialActualTipo = 0;
            array.sort(function(a, b){
                var aux = j( b ).find('td.secondRow, td.firstRow').eq(6).text() - j( a ).find('td.secondRow, td.firstRow').eq(6).text();
                if(aux == 0) return j(a).find('td.secondRow, td.firstRow').eq(0).text().toUpperCase().localeCompare(j(b).find('td.secondRow, td.firstRow').eq(0).text().toUpperCase());
                else return aux;
            });   
        }
    }
    else if(tipoOrden.indexOf("Announce (Tiempo Semilla)") >= 0){
        if(ordenHistorialActualNombre == "Announce (Tiempo Semilla)"){
            fOrdenInversoHistorial(array);
        }
        else{
            j('.subHeader:contains("' + tipoOrden + '")').append(" (↓ Desc.)");
            ordenHistorialActualTipo = 0;
            array.sort(function(a, b){
                var aux = parseInt(j( b ).find('td.secondRow, td.firstRow').find('.small').text()) - parseInt(j( a ).find('td.secondRow, td.firstRow').find('.small').text());
                if(aux == 0) return j(a).find('td.secondRow, td.firstRow').eq(0).text().toUpperCase().localeCompare(j(b).find('td.secondRow, td.firstRow').eq(0).text().toUpperCase());
                else return aux;
            });   
        }
    }
    else if(tipoOrden.indexOf("Actualización") >= 0){
        if(tipoHistorialActual == tipoHistorial.Activos) array = arrayTorrentsActivosOriginal.slice();
        else array = arrayTorrentsInactivosOriginal.slice();
            
        if(ordenHistorialActualNombre == "Actualización"){            
            if(ordenHistorialActualTipo === 0){
                fOrdenInversoHistorial(array);
            }
            else{
                j('.subHeader:contains("' + tipoOrden + '")').append(" (↓ Desc.)");
                ordenHistorialActualTipo = 0;
            }
        }
        else{
            j('.subHeader:contains("' + tipoOrden + '")').append(" (↓ Desc.)");
            ordenHistorialActualTipo = 0;
        }
    }
    else if(tipoOrden.indexOf("Inicio") >= 0){
        tipoOrden = "Actualización";
        j('.subHeader:contains("' + tipoOrden + '")').append(" (↓ Desc.)");
        ordenHistorialActualTipo = 0;
        if(tipoHistorialActual == tipoHistorial.Activos) array = arrayTorrentsActivosOriginal.slice();
        else array = arrayTorrentsInactivosOriginal.slice();
    }   
    
    j('.subHeader:contains("' + tipoOrden + '")').css({"background":"#F5A04C"});
    ordenHistorialActualNombre = tipoOrden;
    fImprimirHistorial(array);
}

// Imprime el Historial visible
function fImprimirHistorial(array){
   var color = 0;
    j('#overlay').find('tr.trRow:visible').remove();
    for(var i = 0; i < array.length; i++){
        if(color == 0){
            j(array[i]).find('td.secondRow, td.firstRow').each(function(){
                j(this).attr("class", "secondRow");
            });
            color = 1;
        }
        else{
            j(array[i]).find('td.secondRow, td.firstRow').each(function(){
                j(this).attr("class", "firstRow");
            });
            color = 0;
        }
        j('#overlay').find('tr:visible').parent().append(array[i]);
    }   
}

// Calcula el espacio en TB
function fCalculaTB(elem){  
    if(elem.indexOf("KB") != -1)
        elem = parseFloat(elem) / 1024 / 1024 / 1024;
    else if(elem.search("MB") != -1)
        elem = parseFloat(elem) / 1024 / 1024;
    else if (elem.search("GB") != -1)
        elem = parseFloat(elem) / 1024;
    else
        elem = parseFloat(elem)    
    return elem;
}

// Invierte el orden y la flecha en el Historial
function fOrdenInversoHistorial(array){    
    if(ordenHistorialActualTipo == 0){
        j('.subHeader:contains("' + ordenHistorialActualNombre + '")').append(" (↑ Asc.)");     
        ordenHistorialActualTipo = 1;
    }
    else{
        j('.subHeader:contains("' + ordenHistorialActualNombre + '")').append(" (↓ Desc.)");
        ordenHistorialActualTipo = 0;
    }   
    j('.subHeader:contains("' + ordenHistorialActualNombre + '")').css({"background":"#F5A04C"});
    array.reverse();
}