Sort Filelist

Sorts Filelist by size

As of 2021-09-27. See the latest version.

// ==UserScript==
// @name         Sort Filelist
// @namespace    Sort Filelist
// @version      0.1
// @description  Sorts Filelist by size
// @author       Conkuist
// @match        https://www.empornium.sx/*
// @match        https://www.empornium.is/torrents.php?id=*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    console.log("sort filelist");

    const filelist_table = document.querySelector(`#content #details_top .torrent_table div[id^="files"] table tbody`);

    if(filelist_table)
    {
        console.log("table found");

        const filelist_table_rows = filelist_table.querySelectorAll(`tr:not(.smallhead,.rowa)`);

        if(filelist_table_rows)
        {
            console.log("rows found");

            Array.from(filelist_table_rows).sort(function(a,b)
            {
                return GetSize(b) - GetSize(a);
            }
            ).forEach(function(e)
            {
                filelist_table.appendChild(e);
            }
            );

        }
    }

    function GetSize(e)
    {
        const cell = e.querySelector("td:last-child");

        if(cell)
        {
            const file_size = cell.innerHTML;
            return ParseSize(file_size);
        }

        return 0;
    }

    function ParseSize(string)
    {
        const parts = string.split(" ");

        if(parts.length > 1)
        {

            const number = parseFloat(parts[0]);

            if(isNaN(number))
            {
                return 0;
            }

            switch(parts[1])
            {
                case "KiB":
                    return number * Math.pow(1024,1);
                case "MiB":
                    return number * Math.pow(1024,2);
                case "GiB":
                    return number * Math.pow(1024,3);
                case "TiB":
                    return number * Math.pow(1024,4);
                default:
                    return number;
            }
        }
    }
})();