☰

javdb auto open

增加页面顶部底部按钮和一键下种按钮

이 스크립트를 설치하려면 Tampermonkey, Greasemonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Userscripts와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 유저 스크립트 관리자 확장 프로그램이 필요합니다.

(이미 유저 스크립트 관리자가 설치되어 있습니다. 설치를 진행합니다!)

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

(이미 유저 스타일 관리자가 설치되어 있습니다. 설치를 진행합니다!)

// ==UserScript==
// @name         javdb auto open
// @namespace    websiteEnhancement
// @author   jimmly
// @version      2026.9.20
// @description  增加页面顶部底部按钮和一键下种按钮
// @create         2023-9-21
// @include        *javdb*
// @grant         GM_getValue
// @grant         GM_setValue
// @grant         GM.getValue
// @grant         GM.setValue
// @grant        GM_xmlhttpRequest
// @grant        GM_log
// @connect      nas.knewbeing.com
// @license MIT
// @run-at document-idle
// ==/UserScript==

(async function (loadJQuery) {

    loadJQuery(window).then(([$, win]) => {
        $.ajaxSetup({
            cache: true
        });
        ["https://cdn.jsdelivr.net/npm/[email protected]/jquery.lazyload.min.js",
            "https://cdn.jsdelivr.net/gh/sodiray/radash@master/cdn/radash.min.js",
            // "https://update.greasyfork.org/scripts/483173/1301961/GM_config_cnjames.js",
            // "https://raw.githubusercontent.com/sizzlemctwizzle/GM_config/refs/heads/master/gm_config.js",
            "https://cdn.jsdelivr.net/gh/sizzlemctwizzle/GM_config@master/gm_config.js",
            "https://update.sleazyfork.org/scripts/476583/common_libs_of_array.js",
            // "https://update.sleazyfork.org/scripts/513894/1470715/remove%20ads%20lib.js",
            // "https://update.sleazyfork.org/scripts/513894/1627441/remove%20ads%20lib.js",
            // "https://update.sleazyfork.org/scripts/513894/1627444/remove%20ads%20lib.js", //with version
            "https://update.sleazyfork.org/scripts/513894/remove%20ads%20lib.js" //no version
        ].reduce((p, url) => p.then(() => new Promise((resolve, reject) => $.getScript(url).done(() => resolve()).fail((er) => { console.log(er) }))), Promise.resolve())
            .then(v => remove_adds($, window))
            .then(v => {

                const config = {
                    baseUrl: 'http://nas.knewbeing.com:8085',
                    user: 'admin',
                    pwd: 'adminadmin',
                    paused: false
                }

                const formHeaders = { 'Content-Type': 'application/x-www-form-urlencoded' }

                const httpReq = options => new Promise((resolve, reject) => {
                    GM_xmlhttpRequest({
                        ...options,
                        timeout: 15_000,
                        onload: response => {
                            if (response.status >= 200 && response.status < 300 && response.responseText === 'Ok.') {
                                resolve(response)
                                return
                            }

                            const responseDetail = response.responseText.trim().slice(0, 500)
                            reject(new Error(`${options.operation} failed: HTTP ${response.status}${responseDetail ? `: ${responseDetail}` : ''}`))
                        },
                        onerror: () => reject(new Error(`${options.operation} failed: Unable to reach qBittorrent Web UI.`)),
                        ontimeout: () => reject(new Error(`${options.operation} failed: qBittorrent Web UI request timed out.`))
                    })
                })

                // 登录
                const login = () => httpReq({
                    operation: 'qBittorrent login',
                    method: 'POST',
                    url: `${config.baseUrl}/api/v2/auth/login`,
                    headers: formHeaders,
                    data: new URLSearchParams({ username: config.user, password: config.pwd }).toString()
                })

                // 添加磁力任务
                const addTask = magnet => httpReq({
                    operation: 'Adding torrent',
                    method: 'POST',
                    url: `${config.baseUrl}/api/v2/torrents/add`,
                    headers: formHeaders,
                    data: new URLSearchParams({ urls: magnet, paused: String(config.paused) }).toString()
                })

                const sendMagnet = async magnet => {
                    if (!magnet) {
                        throw new Error('No magnet link was found on this page.')
                    }
                    if (!magnet.startsWith('magnet:?')) {
                        throw new Error(`The selected link is not a magnet URI: ${magnet}`)
                    }

                    await login()
                    return addTask(magnet)
                }

                window.sendMagnet = sendMagnet
                win.funcDownload = function () {
                    const torrentUrl = $('div.magnet-name>a[href^="magnet:"]').first().prop('href')

                    sendMagnet(torrentUrl)
                        .then(() => {
                            if (localStorage.getItem("autoclosewindow") == 'Auto') {
                                window.close()
                                //window.open("about:blank", "_self").close();
                            }
                        })
                        .catch(err => {
                            console.error('Failed to add torrent:', err)
                            alert(`任务添加失败:${err.message}`)
                        })



                }
                // win.funcList = function () { }
                // win.funcDetail = function () { }
                // const reg = /.*thread-(\d+)-.*/
                // win.__compareKey = function (cache, curr) {
                //     if (cache === curr)
                //         return true
                //     ///thread-6638382-
                //     if (reg.test(cache))
                //         return cache.replace(reg, "$1") === curr
                //     return false
                // }
                // win.fixValue = function (value) {
                //     if (reg.test(value))
                //         return value.replace(reg, "$1")
                //     return value
                // }
                $('table a').removeAttr('style')
                win.actionOpened = function (el) {
                    const item = el.closest('.item')
                    item.hide()
                    try {
                        item.parent().remove(item)
                    }
                    catch {
                        try {
                            item.remove()
                        }
                        catch {

                        }

                    }

                }
                //autoFind(funcIsListPage, cmgId, selector, funcText, $, elBindOpen, unsafeWindow, funcDownload, funcList, funcDetail,actionOpened)
                autoFind(() => ['/', '/tags', '/tags/uncensored'].includes(window.location.pathname), 'javdb', '.item a', el => el.attr('title'), $, {}, win)


            })
    })

})(function (unsafeWindow) {
    return new Promise((resolve, reject) => {
        let dollar
        if (typeof $ != "undefined") {
            console.log('no found $')
            dollar = $
            if ($.noConflict)
                $.noConflict()
        }
        if (typeof jQuery == "undefined" || typeof jQuery.fn == "undefined" || typeof jQuery.fn.lazyload == "undefined") {
            console.log('no found jQuery, loading jquery-3.7.1')
            let script = document.createElement("script")
            script.type = "text/javascript"
            script.src = "https://code.jquery.com/jquery-3.7.1.min.js"
            script.onerror = function () {
                reject(new Error("Failed to load jQuery"))
            }
            script.addEventListener("load", function () {
                jQuery.noConflict()
                if (dollar) $ = dollar

                resolve([jQuery, unsafeWindow ?? window])
            })

            document.head.appendChild(script)
        }
        else {
            setTimeout(function () {
                // Firefox supports
                if (dollar) $ = dollar

                resolve([$, unsafeWindow ?? window])
            }, 30)
        }
    })
})