Greasy Fork

Greasy Fork is available in English.

115小助手

顶部链接任务入口还原、SHA1 快速查重(新页面打开)、一键 SHA1 查重

当前为 2021-02-04 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name          115小助手
// @namespace     https://github.com/maomao1996/tampermonkey-scripts
// @version       0.4.0
// @description   顶部链接任务入口还原、SHA1 快速查重(新页面打开)、一键 SHA1 查重
// @icon      	  https://115.com/favicon.ico
// @author        maomao1996
// @include       *://115.com/*
// @grant         GM_openInTab
// ==/UserScript==
;
(function () {
    'use strict';
    // 过滤非 iframe 场景
    if (window.self === window.top) {
        return;
    }
    var search = location.search;
    /**
     * 工具方法 - url 中是否存在某个字符串
     */
    var urlHasString = function (str) { return search.indexOf(str) > -1; };
    /**
     * 在顶部菜单添加链接任务按钮
     */
    var addLinkTaskBtn = function () {
        $('#js_top_panel_box .button[menu="upload"]').after('<a href="javascript:;" class="button btn-line btn-upload" menu="offline_task"><i class="icon-operate ifo-linktask"></i><span>链接任务</span><em style="display:none;" class="num-dot"></em></a>');
    };
    /**
     * 网盘列表 SHA1 查重
     */
    var initRepeatSha1 = function () {
        if (!$('#repeat-all-sha1-btn').length) {
            $('#js_path_add_dir').after('<a id="repeat-all-sha1-btn" href="javascript:;" class="button btn-line" style="margin-left: 10px;"><span>一键SHA1查重</span></a>');
        }
        var addRepeatSha1Btn = function () {
            $('li[file_type="1"]').each(function () {
                if (!$(this).find('.repeat-sha1-btn').length) {
                    $(this)
                        .find('a[menu="public_share"]')
                        .after('<a class="repeat-sha1-btn"><span>SHA1查重</span></a>');
                }
            });
        };
        var listObserver = new MutationObserver(function (mutationsList) {
            mutationsList.forEach(function (_a) {
                var type = _a.type;
                type === 'childList' && addRepeatSha1Btn();
            });
        });
        if ($('#js_data_list').length) {
            listObserver.observe($('#js_data_list')[0], { childList: true });
        }
        var handleRepeatSha1 = function (file_id, isPrompt) {
            if (isPrompt === void 0) { isPrompt = true; }
            return new Promise(function (resolve) {
                isPrompt &&
                    TOP.Core.MinMessage.Show({
                        text: '正在查找',
                        type: 'load',
                        timeout: 2e4
                    });
                TOP.UA$.ajax({
                    url: '//webapi.115.com/files/get_repeat_sha',
                    data: { file_id: file_id },
                    xhrFields: { withCredentials: !0 },
                    dataType: 'json',
                    type: 'GET',
                    success: function (_a) {
                        var state = _a.state, data = _a.data;
                        isPrompt && TOP.Core.MinMessage.Hide();
                        if (state && data.length > 1) {
                            GM_openInTab("//115.com/?tab=sha1_repeat&file_id=" + file_id + "&mode=wangpan");
                            resolve(true);
                        }
                        else {
                            isPrompt &&
                                TOP.Core.MinMessage.Show({
                                    text: '没有重复文件',
                                    type: 'war',
                                    timeout: 2e3
                                });
                            resolve(false);
                        }
                    }
                });
            });
        };
        $(document).on('click', '.repeat-sha1-btn', function () {
            var fileId = $(this).parent().parent().attr('file_id');
            fileId && handleRepeatSha1(fileId);
        });
        // 一键 SHA1 查重
        var SHA1_MAP = {};
        $(document).on('click', '#repeat-all-sha1-btn', function () {
            var $li = $('li[file_type="1"]');
            if (!$li.length || Object.keys(SHA1_MAP).length === $li.length) {
                TOP.Core.MinMessage.Show({
                    text: '当前文件夹下没有可查重文件',
                    type: 'war',
                    timeout: 2e3
                });
                return;
            }
            TOP.Core.MinMessage.Show({
                text: '正在查找',
                type: 'load',
                timeout: 2e4
            });
            var index = 0;
            var findRepeat = function () {
                if (index >= $li.length) {
                    TOP.Core.MinMessage.Show({
                        text: '当前文件夹下没有可查重文件',
                        type: 'war',
                        timeout: 2e3
                    });
                    return;
                }
                var $currentLi = $li.eq(index);
                var fileId = $currentLi.attr('file_id');
                var sha1 = $currentLi.attr('sha1');
                index++;
                if (fileId && sha1 && !SHA1_MAP[sha1]) {
                    SHA1_MAP[sha1] = 1;
                    return handleRepeatSha1(fileId, false).then(function (flag) {
                        if (!flag) {
                            return findRepeat();
                        }
                        TOP.Core.MinMessage.Show({
                            text: "\u5DF2\u627E\u5230\u3010" + $currentLi.attr('title') + "\u3011\u7684\u91CD\u590D\u6587\u4EF6",
                            type: 'suc',
                            timeout: 2e3
                        });
                    });
                }
                return findRepeat();
            };
            findRepeat();
        });
    };
    /**
     * SHA1 查重列表(支持选中第一个元素)
     */
    var initRepeatSha1List = function () {
        var listObserver = new MutationObserver(function (mutationsList) {
            mutationsList.forEach(function (_a) {
                var type = _a.type;
                if (type === 'childList') {
                    var $first = $('#js-list li:first-child');
                    if (!$first.attr('item')) {
                        $first.attr('item', 'file');
                        $first.find('i.file-type').removeProp('style');
                        $first
                            .children('.file-name-wrap')
                            .prepend('<b class="checkbox"></b>');
                    }
                }
            });
        });
        listObserver.observe($('#js-list')[0], { childList: true });
    };
    // 初始化
    $(function () {
        // 网盘列表模块
        if (urlHasString('cid=')) {
            // 添加链接任务入口
            addLinkTaskBtn();
            // SHA1 查重
            initRepeatSha1();
        }
        // SHA1 查重列表模块
        else if (urlHasString('tab=sha1_repeat')) {
            initRepeatSha1List();
        }
    });
})();