Greasy Fork

DICMusic Unchecked

自动打开未检查的专辑链接

// ==UserScript==
// @name         DICMusic Unchecked
// @namespace    http://tampermonkey.net/
// @version      0.2.1
// @description  自动打开未检查的专辑链接
// @match        https://dicmusic.com/torrents.php*
// @exclude      https://dicmusic.com/torrents.php?id=*
// @grant        none
// @license MIT
// ==/UserScript==

// 用户配置 - 设置一次性打开的最大链接数量 (0 表示不限制)
const MAX_LINKS = 20;

(function() {
    'use strict';

    function isUserUploadedList() {
        const params = new URLSearchParams(window.location.search);
        return params.has('type') && params.get('type') === 'uploaded' && params.has('userid');
    }

    function collectTorrentGroups() {
        return Array.from(document.querySelectorAll('tr.group:not(.torrent_all_checked) a[href^="torrents.php?id="]'))
            .map(link => 'https://dicmusic.com/' + link.getAttribute('href'));
    }

    function collectUserUploadedGroups() {
        const links = new Set(); // 使用 Set 来自动去重
        document.querySelectorAll('div.group_info.clear').forEach(div => {
            // 寻找未检查状态图标
            const uncheckedIcon = div.querySelector('i.far.fa-circle');
            if (!uncheckedIcon) return;

            // 查找链接
            const tooltipLink = div.querySelector('a.tooltip[dir="ltr"][href^="torrents"]');
            if (tooltipLink) {
                // 获取原始链接(PL)
                const href = tooltipLink.getAttribute('href');
                // 只保留 id 参数(Torrent Group)
                const match = href.match(/torrents\.php\?id=\d+/);
                if (match) {
                    links.add('https://dicmusic.com/' + match[0]);
                }
            }
        });
        return Array.from(links); // 转换回数组
    }

    function init() {
        const statsPanel = document.querySelector('.alertbar.blend');
        if (!statsPanel) return;

        const button = document.createElement('a');
        button.textContent = 'Open Unchecked';
        button.href = 'javascript:void(0);';
        button.style.marginLeft = '10px';

        statsPanel.appendChild(button);

        button.addEventListener('click', function() {
            let albumLinks;
            if (isUserUploadedList()) {
                albumLinks = collectUserUploadedGroups();
            } else {
                albumLinks = collectTorrentGroups();
            }

            const linksToOpen = MAX_LINKS > 0 ? albumLinks.slice(0, MAX_LINKS) : albumLinks;

            if (MAX_LINKS > 0 && albumLinks.length > MAX_LINKS) {
                alert(`已设置最大打开链接数为 ${MAX_LINKS}\n找到 ${albumLinks.length} 个链接,将只打开前 ${MAX_LINKS} 个\n处理完成后按需刷新本页面以更新checked状态`);
            }

            linksToOpen.forEach(url => window.open(url, '_blank'));
        });
    }

    if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', init);
    } else {
        init();
    }
})();