Greasy Fork is available in English.

iyuu 辅种 qBittorrent 和 Transmission 自动开始任务

2024/7/5 14:08:26

// ==UserScript==
// @name        iyuu 辅种 qBittorrent 和 Transmission 自动开始任务
// @namespace   Violentmonkey Scripts
// @include     *
// @grant       none
// @version     1.2
// @description 2024/7/5 14:08:26
// ==/UserScript==

(function() {
    'use strict';

    function clickContinue() {
        // 处理 qBittorrent
        processQbittorrent();
        // 处理 Transmission
        processTransmission();
    }

    function processQbittorrent() {
        // 检测状态为"完成"的项并模拟点击
        var completedRows = document.querySelectorAll('td[title="完成"]');
        completedRows.forEach(row => {
            simulateClick(row);
        });

        // 检测状态为"暂停",且完成度大于99%的项
        var pausedRows = document.querySelectorAll('td[title="暂停"]');
        pausedRows.forEach(row => {
            // 寻找完成度元素
            var progressBar = row.closest('tr').querySelector('.progressbar_dark');
            if (progressBar) {
                // 获取完成度百分比
                var percentage = parseFloat(progressBar.textContent);
                if (percentage > 99) {
                    // 当完成度大于99%时,模拟点击
                    simulateClick(row);
                }
            }
        });
    }

    function processTransmission() {
        // 检测状态为"已暂停"的项
        var pausedRows = document.querySelectorAll('div.td[style*="width: 80px;"] > div');
        pausedRows.forEach(row => {
            if (row.textContent.trim() === "已暂停") {
                // 寻找完成度元素
                var progressBar = row.closest('.tr').querySelector('.progressbar.white-outline > div:nth-child(1)');
                if (progressBar) {
                    // 获取完成度百分比
                    var percentage = parseFloat(progressBar.textContent);
                    if (percentage > 99) {
                        // 当完成度大于99%时,模拟点击
                        simulateClick(row);
                    }
                }
            }
        });
    }

    function simulateClick(element) {
        // 模拟点击事件
        var clickEvent = new MouseEvent("click", {
            "view": window,
            "bubbles": true,
            "cancelable": false
        });
        element.dispatchEvent(clickEvent); // 模拟点击项

        // 查找并点击对应的"继续"按钮
        var continueButton = document.querySelector('img.mochaToolButton[title="继续"]');
        if (continueButton) {
            continueButton.click();
        } else {
            // 如果在 Transmission 中
            simulateF3KeyPress();
        }
    }

    function simulateF3KeyPress() {
        var targetElement = document.activeElement || document.body;
        var f3KeyDown = new KeyboardEvent('keydown', {
            key: 'F3',
            code: 'F3',
            keyCode: 114,
            which: 114,
            bubbles: true,
            cancelable: true
        });
        var f3KeyUp = new KeyboardEvent('keyup', {
            key: 'F3',
            code: 'F3',
            keyCode: 114,
            which: 114,
            bubbles: true,
            cancelable: true
        });
        targetElement.dispatchEvent(f3KeyDown);
        targetElement.dispatchEvent(f3KeyUp);
    }

    setInterval(clickContinue, 5000); // 每5秒执行一次操作
})();