115 File Hash Dumper

Dump the file hash list of 115 net disk

// ==UserScript==
// @name         115 File Hash Dumper
// @namespace    https://berd.moe/?from=115_dumper
// @version      1.0.1
// @description  Dump the file hash list of 115 net disk
// @author       FENGberd
// @match        https://115.com/?ct=file&ac=userfile*
// @grant        none
// ==/UserScript==

(function () {
    'use strict';
    var $ = window.jQuery;
    function listFiles(cid, callback, prefix, currentList, waitList) {
        if (prefix === undefined) {
            prefix = "";
        }
        if (currentList === undefined) {
            currentList = [];
        }
        if (waitList === undefined) {
            waitList = [];
        }
        waitList.push(cid);
        TOP.Core.DataAccess.FileRead.GetFileList({
            "aid": 1,
            "cid": cid,
            "o": "file_name",
            "asc": 1,
            "offset": 0,
            "show_dir": 1,
            "limit": "115",
            "code": "",
            "scid": "",
            "snap": 0,
            "natsort": 1,
            "record_open_time": 1,
            "source": "",
            "format": "json",
            "fc_mix": "",
            "type": "",
            "star": "",
            "is_share": "",
            "suffix": "",
            "custom_order": "",
            "is_q": ""
        }, function (r) {
            for (let item of r.data) {
                if (item.cid != cid) {
                    listFiles(item.cid, null, prefix + item.n + "/", currentList, waitList);
                } else {
                    currentList[prefix + item.n] = item;
                }
            }
            waitList.splice(waitList.indexOf(cid), 1);
            if (callback) {
                var check = setInterval(function () {
                    if (waitList.length == 0) {
                        callback(currentList);
                        clearInterval(check);
                    }
                }, 500);
            }
        });
    }
    $(function () {
        let target = $('.button[menu=offline_task]');
        console.info(target);
        if (target.length > 0) {
            var a = $('<a href="javascript:;" class="button btn-line btn-upload"><i class="icon-operate ifo-prop"></i><span>获取Hash</span><em style="display:none;" class="num-dot"></em></a>');
            a.click(function () {
                listFiles(TOP.Main.GetCurWangPanCid(), function (data) {
                    console.info(data);
                    var content = $('<div class="dialog-input"><textarea id="result" rows="8"></textarea></div><div class="dialog-bottom"><div class="con"><a href="javascript:;" class="button btn-light" data-btn="copy">复制</a><a href="javascript:;" class="button" data-btn="close">关闭</a></div></div>');
                    var result = '';
                    for (let r in data) {
                        result += data[r].sha + "|" + data[r].s + "|" + r + "\n";
                    }
                    var textarea = content.find('#result').val(result);
                    content.delegate("[data-btn]", "click", function () {
                        switch ($(this).attr("data-btn")) {
                            case "copy":
                                textarea[0].focus();
                                textarea[0].select();
                                console.info(TOP.document.execCommand('copy'));
                                break;
                            case "close":
                                _self.Close();
                                break;
                        }
                    });
                    let _self = new TOP.Core.DialogBase({
                        title: "Hash Result",
                        content: content
                    });
                    _self.Open();
                });
            });
            a.insertAfter(target[0]);
        }
    });
})();